赞
踩
消费者组的重平衡流程 : 让组内所有的消费者消费哪些主题分区达成一致
重平衡的 3 个触发条件:
重平衡过程通知其他消费者 : 靠消费者端的心跳线程 (Heartbeat Thread)
消费者会定期发送心跳请求 (Heartbeat Request) 到 Broker 的协调者,来表明存活
KafkaConsumer.poll
的那个线程重平衡的通知机制 : 通过心跳线程来完成
REBALANCE_IN_PROGRESS
封装进心跳请求的响应中,发给消费者REBALANCE_IN_PROGRESS
,就得知开始重平衡heartbeat.interval.ms
: 控制重平衡通知的频率
Kafka 有一套消费者组状态机 (State Machine),来帮助协调者完成重平衡
消费者组的 5 种状态 :
状态 | 含义 |
---|---|
Empty | 组内没有成员,但消费者组还存在已提交的位移数据,且这些位移尚未过期 |
Dead | 组内没有成员,但组的元数据信息已经在协调者被移除。协调者组件保存着当前向它注册过的所有组信息 |
PreparingRebalance | 消费者组准备重平衡,所有成员要重新请求加入消费者组 |
CompletingRebalance | 消费者组下所有成员已经加入,各个成员等待分配方案(老版本 : AwaitingSync) |
Stable | 消费者组的稳定状态 : 重平衡已经完成,组内各成员能正常消费数据 |
状态机的各状态流转 :
日志的输出:尝试定期删除过期位移
Removed ✘✘✘ expired offsets in ✘✘✘ milliseconds.
消费者的重平衡两个步骤:
JoinGroup 请求的处理过程 :
SyncGroup 请求的处理流程 :
新成员入组 : 组处于 Stable 状态后,有新成员加入
主动离组 : 消费者调用 close()
主动通知协调者要退出
崩溃离组 : 消费者挂了,而导致离组
session.timeout.ms
) 才能感知Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。