当前位置: 首页 > article >正文

kafka Broker专题

目录

  • Broker
    • 描述
    • zookeeper存储情况
    • Broker组成
    • Broker工作流程
    • 副本

Broker

描述

1. 定义:

  • Broker是Kafka集群中的一个服务器节点,负责存储消息数据并处理客户端(如Producer和Consumer)的请求。

2. 标识:

  • 每个Broker都有一个唯一的标识符,称为broker.id,用于在集群中区分不同的Broker。

3. 功能:

  • 存储消息:Broker将Producer发送的消息存储到磁盘上。
  • 转发消息:Broker将存储的消息转发给订阅该消息的Consumer。
  • 管理分区:Broker负责管理Kafka中的分区(Partition),包括分区的创建、删除、复制等。

zookeeper存储情况

下图为zookeeper节点中的存储
在这里插入图片描述

  1. 具体主题节点: 每个主题在ZooKeeper中都有一个节点,节点名称为主题ID,如 [0,1,2]。 在该节点下,存储了与主题相关的各种信息,例如 ids, topics, seqid等。
  2. 事务状态和分区信息: 图片中展示了事务状态(__transaction_state)和分区信息(partitions)。 partitions节点下存储了每个分区的详细信息,包括每个分区的leader和ISR(In-Sync Replicas)列表。
    每个分区的信息以epoch和leader为标识,存储其状态以及ISR列表。
  3. 消费者偏移量: 消费者的偏移量信息存储在 __consumer_offsets 路径下。 每个消费者的状态信息以epoch和消费者ID为标识,存储其状态以及分区信息。

Broker组成

1. 网络层:

  • Broker通过网络层与客户端进行通信,接收Producer发送的消息,并将消息发送给Consumer。

2. 存储层:

  • Broker将消息存储到磁盘上,采用分段(Segment)存储的方式,每个Segment包含一个.log文件和一个.index文件。
  • .log文件用于存储消息数据,.index文件用于存储消息的偏移量索引,便于快速查找消息。

3. 控制器(Controller):

  • 每个Kafka集群都有一个Controller,负责集群的元数据管理、Leader选举、分区重分配等任务。
  • Controller通常运行在集群中的某个Broker上,当该Broker发生故障时,会触发新的Controller选举。

4. 复制管理器:

  • Broker负责管理分区的副本(Replica),包括Leader和Follower的选举、消息复制等。
  • 当Leader发生故障时,复制管理器会从ISR(In-Sync Replicas)中选择新的Leader。

Broker工作流程

在这里插入图片描述

1. 启动与注册

  • 启动Broker: 当启动一个Kafka Broker时,它会首先进行初始化操作,加载配置文件,创建必要的线程和组件。

  • 向ZooKeeper注册: Broker启动后,会向ZooKeeper注册自己的信息。ZooKeeper是Kafka集群的元数据存储中心,负责维护集群的状态信息。Broker会在ZooKeeper的/brokers/ids路径下创建一个节点,节点名称是Broker的唯一标识符(broker.id),并存储该Broker的地址和端口等信息。

  • 注册Controller: Kafka集群中的每个Broker都有一个内置的Controller组件。Controller负责集群的元数据管理、Leader选举、分区重分配等重要任务。在Broker启动后,会尝试在ZooKeeper的/controller路径下注册自己为Controller。第一个成功注册的Broker将成为集群的Controller,负责监听其他Broker的状态变化。

2. 监听与响应

  • 监听ZooKeeper变化: Broker会持续监听ZooKeeper中与自己相关的节点的变化。例如,它会监听/brokers/ids路径下其他Broker的状态变化,以便在集群中其他Broker发生故障时,能够及时调整自己的状态。

  • 处理客户端请求: Broker接收来自Producer(生产者)和Consumer(消费者)的请求。Producer向Broker发送消息,Broker将消息存储到磁盘中;Consumer从Broker订阅消息,Broker将消息发送给Consumer。Broker处理这些请求时,会根据消息的主题(Topic)和分区(Partition)进行路由。

3. 消息的存储与处理

  • 存储消息: 当Broker接收到Producer发送的消息时,会首先将消息写入到操作系统的页面缓存中,然后异步地刷新到磁盘上。Kafka采用分段(Segment)存储的方式,每个Segment包含一个.log文件(存储消息数据)和一个.index文件(存储消息的偏移量索引)。这种方式既提高了写入性能,又便于消息的快速查找和删除。

  • 消息复制: 为了提高消息的可靠性,Kafka支持消息的复制。每个Partition可以有多个副本(Replica),其中一个副本是Leader,负责处理读写请求;其他副本是Follower,从Leader同步消息数据。当Leader发生故障时,可以从Follower中选举出新的Leader,继续处理消息。

  • Leader选举: 当Leader发生故障时,Broker会触发Leader选举过程。Controller负责监控所有Broker和Partition的状态,当检测到Leader故障时,会在ZooKeeper中更新Leader信息,并通知所有Broker更新本地的Leader缓存。新的Leader会从ISR(In-Sync
    Replicas,与Leader保持同步的副本集合)中选择,以确保消息的可靠性和一致性。

4. 处理Consumer请求

  • 消费偏移量管理: Broker还负责管理Consumer的消费偏移量。Consumer在消费消息时,会定期向Broker提交自己的消费偏移量,Broker会将偏移量存储到ZooKeeper或Kafka内部的特定Topic中。这样,即使Consumer发生故障重启,也能从上次消费的位置继续消费消息。

  • 响应Consumer请求: 当Consumer向Broker发送消息获取请求时,Broker会根据Consumer提供的主题、分区和偏移量信息,从相应的Segment中读取消息数据,并返回给Consumer。Broker会确保Consumer读取到的是已经成功复制到ISR中的消息,以保证消息的一致性。

5. 集群协作与维护

  • 负载均衡: Kafka集群支持动态的负载均衡。当新增或删除Broker时,Controller会触发分区重分配过程,将现有的分区重新分配到集群中的Broker上,以均衡负载。

  • 监控与报警: Broker会定期向ZooKeeper报告自己的状态信息,如磁盘使用情况、网络延迟等。Controller会监控这些信息,并在检测到异常情况时触发报警或采取相应的措施。

  • 故障恢复: 当Broker发生故障时,Controller会触发故障恢复流程。它会在ZooKeeper中更新Broker的状态信息,通知其他Broker停止向故障的Broker发送请求,并从ISR中选择新的Leader继续处理消息。同时,Controller会尝试重启故障的Broker,并在其恢复后重新加入集群。


副本

1. Kafka 副本作用:避免单点故障,提高数据可靠性。 partition是有序消息日志,那么一定不能只保存这一份日志,否则一旦保存partition的Kafka服务器挂掉了,其上保存的消息也就都丢失了。分布式系统必然要实现高可靠性,而目前实现的主要途径还是依靠冗余机制一一简单地说,就是备份多份日志。这些备份日志在Kafka中被称为副本(replica),它们存在的唯一目的就是防止数据丢失,这一点一定要记住!

2. Kafka 默认副本 1 个,生产环境一般配置为 2 个,保证数据可靠性;太多副本会增加磁盘存储空间,增加网络上数据传输,降低效率。

3. Kafka 中副本分为:Leader 和 Follower。Kafka 生产者只会把数据发往 Leader,然后 Follower 找 Leader 进行同步数据。Leader 发生故障之后,就会从 ISR 中选举新的 Leader。

4. Kafka 分区中的所有副本统称为 AR(Assigned Repllicas),AR = ISR + OSR。

  • ISR(in-sync replica),表示和 Leader 保持同步的 Follower 集合。
  • OSR,表示 Follower 与 Leader 副本同步时,延迟过多的副本。
  • 如果 Follower 长时间未向 Leader 发送通信请求或同步数据,则该 Follower 将被踢出 ISR,放到OSR。该时间阈值由replica.lag.time.max.ms参数设定,默认 30s。
  • 当OSR中Follower重新“追上”了Leader的进度时,OSR->ISR。

http://www.kler.cn/a/469615.html

相关文章:

  • 均值聚类算法
  • 【Linux】文件的压缩与解压
  • [文献精汇]使用PyCaret预测 Apple 股价
  • 物联网:七天构建一个闭环的物联网DEMO
  • 倾斜摄影相机在不动产确权登记和权籍调查中的应用
  • 十四、Vue 混入(Mixins)详解
  • pytdx,取市场股票列表,get_security_list,start参数为8000时,数据获取失败,导致无法获取全量数据的BUG修正
  • vue3-diff算法-最长递增子序列
  • 数据结构C语言描述8(图文结合)--哈希、哈希冲突、开放地址法、链地址法等实现
  • AndroidStudio环境版本管理
  • XIAO Esp32 S3 网络摄像头——3音视频监控
  • 2.1.7-1 io_uring的使用
  • 2025年,AI时代下的前端职业思考
  • 【网络安全 | 漏洞挖掘】绕过电子邮件确认实现预账户接管
  • 01——python (mac)安装
  • Redis两种主要的持久化方式是什么?
  • pytorch梯度上下文管理器介绍
  • 新疆乡镇界面图层arcgis格式shp数据有乡镇名称和编码2020年wgs84坐标无偏移数据内容测评
  • MySQL 04 章——运算符
  • 100万并发用户的分布式频道聊天系统
  • CSP初赛知识学习计划(第三天)
  • 【无线传感网】无线传感器网络安全
  • PostgreSQL 表达式
  • jenkins插件下载和从gitlab中拉取文件传送到虚拟机中
  • asp.net core框架搭建4-部署IIS/Nginx/Docker
  • 【AutoSAR】【底软自动化】Arxml自动配置平台