【discuz 整站源码】【体温上报模块源码】【io模拟USB源码】kafka consumer 源码

来源:浮动抬轿指标源码

1.Kafka消费者源码:重平衡(1)-初始化与FIND_COORDINATOR
2.sarama 源码解析--Kafka的重平衡

kafka consumer 源码

Kafka消费者源码:重平衡(1)-初始化与FIND_COORDINATOR

       在Kafka 2.5.2的消费者组中,重平衡是关键,它定义了消费者如何根据订阅关系调整对Topic分区的分配。当消费者数量、订阅的Topic或GroupCoordinator所在的Broker发生变更时,会触发重平衡。discuz 整站源码

       消费者组状态由GroupState类管理,共有五个状态:Empty(无成员)、PreparingRebalance(加入中)、CompletingRebalance(等待分配)、Stable(已平衡)和Dead(元数据已删除)。状态间的转换基于预先定义的前置状态。例如,体温上报模块源码从Empty到PreparingRebalance,预示着重平衡的开始。

       重平衡过程分为几个步骤,首先是消费者和Broker之间的协调。服务端启动时,GroupCoordinator组件即已就绪,io模拟USB源码而Consumer通过ConsumerCoordinator与之通信。在启动时,消费者首先会通过FindCoordinatorRequest找到GroupCoordinator,通过最小负载节点发送请求,然后服务端确定哪个Broker负责协调,如groupId的2020悬赏平台源码hash值对consumer_offsets分区数取模确定。

       一旦找到GroupCoordinator,消费者会发送JoinGroupRequest。后续步骤如SYNC_GROUP和HEARTBEAT确保消费者与协调器保持同步。这部分详细内容在后续的文章中会进一步探讨。

sarama 源码解析--Kafka的重平衡

       重平衡操作

       重平衡是动态调整Consumer Group下的Consumer订阅Topic的分区的一个关键操作。Sarama中的shmget系统调用源码BalanceStrategyRange和BalanceStrategySticky策略具体实施这一操作。

       重平衡触发条件之一是成员数变更。这一过程包括以下步骤:

       1. 启动一个新的消费者实例。

       2. 调用Consume方法。

       3. Consume方法初始化连接信息,并启动一个goroutine。程序会阻塞在sess.ctx.Done()上。

       4. 在newSession方法中找到协调者信息,并发起join请求和syncgroup请求。Consumer Leader执行一次重平衡。

       5. 创建consumer group session,并初始化offset manager和开启心跳goroutine。

       6. 当心跳超时或收到coordinator的重平衡通知时,调用cancel()方法取消操作,退出Consume逻辑。

       7. 此时,Consume函数优雅退出。由于外层循环的存在,会重新执行Consume,实现一次重平衡。

       另一个触发重平衡的条件是订阅主题分区数发生变更。这一过程如下:

       1. 在Consume方法中开启心跳goroutine,并将consumer group session传递给它。

       2. 分区数发生变化时,调用sess.cancel(),Consume优雅退出并重新执行,实现重平衡。

文章所属分类:热点频道,点击进入>>