为了账号安全,请及时绑定邮箱和手机立即绑定

Kafka流处理平台

标签:
大数据

kafka基本概念

Producer: 消息和数据的生产者,向Kafka的一个topic发布消息的进程/代码/服务

Consumer: 消息和数据的订阅者,订阅数据(topic)并且处理其发布的消息的进程/代码/服务

Consumer Group: 逻辑概念,对于同一个topic,会广播给不同的group,一个group中,只有一个consumer可以消费该消息

Broker: 物理概念,Kafka集群中的每个Kafka节点

Topic: 逻辑概念,Kafka消息的类别,对数据进行区分 隔离

Partition: 物理概念,Kafka下数据存储的基本单元。一个Topic的数据,会被分散存储到多个Partition,每个Partition是有序的

Replication: 同一个Partition可能会有多个Replica,多个Replica之间数据是一样的

Replication Leader: 一个Partition的多个Replica上,需要一个Leader负责该Partition上与Producer和Consumer交互

ReplicaManager: 负责管理当前broker所有分区和副本的信息,处理KafkaController发起的一些请求,副本状态的切换、添加/读取消息等

kafka概念延伸

Partition

  • 每一个Topic被切分为多个Partitions
  • 消费者数目少于或等于Partition的数目
  • Broker Group中的每一个Broker保存Topic的一个或多个Partitions
  • Consumer Group中的仅有一个Consumer读取Topic的一个或多个Partitions,一个partition只能被一个Consumer消费

Replication

  • 当集群中有Broker挂掉的情况,系统可以主动地使Replicas提供服务
  • 系统默认设置每一个Topic的replication系数为1,可以在创建Topic时单独设置

Replication特点

  • Replication的基本单位是Topic的Partition

  • 所有的读和写都从Leader进,Follwers只是作为备份

  • Follower必须能够及时复制Leader的数据

  • 增加容错性与可扩展性

kafka基本结构

图片描述

图片描述

图片描述

Kafka消息结构

  • OfferSet:记录消息的偏移量

  • Length:记录的是整条消息的长度

  • CRC32:校验字段,校验信息的完整性

  • Magic:特定数字,判断数据是否属于Kafka,不属于就直接丢弃

  • attributes:(可选)记录的是数据的多个属性,是一个枚举值

kafka特点

Kafka的特点:分布式

  • 多分区

  • 多副本

  • 多订阅者

  • 基于ZooKeeper调度

kafka特点:高性能

  • 吞吐量高
  • 并发高
  • 低延时
  • 时间复杂度为O(1)

kafka特点:持久性与扩展性

  • 数据可持久化

  • 容错性

  • 支持在线水平扩展

  • 消息自动平衡

Kafka应用场景:

  • 消息队列
  • 行为跟踪
  • 元信息监控(运维性质)
  • 日志收集
  • 流处理
  • 事件源
  • 持久性日志(commit log)

Kafka简单案例

启动zookeeper命令: zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties
进入kafka安装目录,cd /usr/local/Cellar/kafka/1.1.0/
启动kafka命令:./bin/kafka-server-start /usr/local/etc/kafka/server.properties
创建Topic:./bin/kafka-topics --create --zookeeper localhost:2181--replication-factor 1 --partitions 3 --topic imooc-kafka-topic
查看Topic:./bin/kafka-topics --list --zookeeper localhost:2181
启动kafka生存者:./bin/kafka-console-producer --broker-list localhost:9092 --topic imooc-kafka-topic
启动kafka消费者:./bin/kafka-console-consumer --bootstrap-server localhost:9092 --topic imooc-kafka-topic --from-beginning 

Kafka消息事务

数据传输的事务定义

  • 最多一次:消息不会被重复发送,最多被传输一次,但也有可能一次不传输
  • 最少一次:消息不会被漏发送,最少被传输一次,但也有可能被重复传输

事务保证

  • 内部重试问题:Procedure幂等处理
  • 多分区原子写入

事务保证-避免僵尸实例

  • 每个事务Producer分配一个transactional.id,在进程重新启动时能够识别相同的Producer实例
  • Kafka增加了一个与transactional.id相关的epoch,存储每个transactional.id内部元数据
  • 一旦epoch被触发,任何具有相同的transactional.id和更旧的epoch的Producer被视为僵尸,Kafka会拒绝来自这些Producer的后续事务性写入

Kafka高级特性-零拷贝

  • 网络传输持久性日志块
  • Java Nio channel.transforTo()方法
  • Linux sendfile系统调用

文件传输到网络的公共数据路径

  • 操作系统将数据从磁盘读入到内核空间的页缓存
  • 应用程序将数据从内核空间读入到用户空间缓存中
  • 应用程序将数据写回到内核空间到socket缓存中
  • 操作系统将数据从socket缓存区复制到网卡缓存区,以便将数据经网络发出

零拷贝过程

  • 操作系统将数据从磁盘读入到内核空间的页缓存
  • 将数据的位置和长度的信息的描述符增加至内核空间(socket缓存区)
  • 操作系统将数据从内核拷贝到网卡缓存区,以便将数据经网发出

图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
8
获赞与收藏
2

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消