首页 > 其他分享 >kafka rebalance 总结(更新中)

kafka rebalance 总结(更新中)

时间:2023-07-26 16:44:26浏览次数:37  
标签:总结 group rebalance broker kafka 心跳 poll consumer

KAFKA 2.3 以后,consumer 分为 dynamic 和 static,以是否设置了 group.instance.id 属性区分。

以默认的 consumer 为例,即 dynamic consumer,以下图描述其正常的生命周期:

依赖 FindCoordinator, JoinGroup, SyncGroup, Heatbeat, LeaveGroup 等接口,kafka consumer  和 broker 联合完成了 group 管理。

协议命令表:

命令 consumer broker
FindCoordinator consumer 启动时,从配置的 bootstrap server 中选择一个负载较小的 broker,向其发送查找 coordinator 的请求  
JoinGroup

consumer 查询到 coordinator 后,开始加入组,join group 时携带了客户端的配置信息,具体内容参见 JoinGroupRequestData

 
SyncGroup

consumer 接收到 join group 响应后,如果当前实例分配到了 leader,则按照分配策略分配分区给各消费者,并将分配结果以 SyncGroup 请求发送给 broker。如果当前实例非 leader,则发送一个不带内容的 SyncGroup 请求。具体内容参见 SyncGroupRequestData

 
Heatbeat  从某种程度上看,一次 poll 算是一次心跳,poll 时会更新心跳计时器的时刻,如果 consumer 一直没有 poll 动作,HeartbeatThread 则自己发起心跳请求  
LeaveGroup    

 

配置信息表:

属性 默认值 别名 consumer broker
group.id   groupId    
group.instance.id   groupInstanceId 如果提供了值, 则为 static consumer,当 consumer close 时,不会主动 leave group。可避免滚动发布时,频繁的 rebalance  
max.poll.interval.ms 300000 rebalanceTimeoutMs HeartbeatThread 检查 consumer 两次 poll 的时间间隔,如果超过了配置值,则主动 leave group  
session.timeout.ms 10000 sessionTimeoutMs HeartbeatThread 检查 session 超过了配置的值,则标记 coordinator 为 unkonwn,并主动断开连接,重新开始下一轮 group 流程,即 rebalance  
heartbeat.interval.ms 3000 heartbeatIntervalMs 以默认值为例,假定 consumer 在没有 poll 行为且还没超过 rebalance 间隔时,HeartbeatThread 每隔 3 秒向 broker 发送一次心跳,成功接收到心跳响应后,则更新 seesion 的时刻  
partition.assignment.strategy RangeAssignor   consumer 在发送 join group 请求时,会携带分配的策略  

梳理完上面的表格,得出结论:在 HeartbeatThread 无限循环中, consumer 利用心跳来维持 session,当 session 过期时触发 rebalance,当 poll 时间过期时,触发 rebalance

分析 2 种常见的异常情况:
1. consumer 发送心跳,由于网络原因,或者 coordinator broker 宕机,consumer 一直没有接收到心跳响应,则 session 随之会过期,会触发重新加入组,即 reblance
2. consumer 和 coordinator 心跳正常,但是 consumer 一直没有 poll 动作,此时 consumer 会主动离开 group

标签:总结,group,rebalance,broker,kafka,心跳,poll,consumer
From: https://www.cnblogs.com/allenwas3/p/17582413.html

相关文章

  • Windows中安装和使用Kafka
    一、打开Kafka官网进行下载Kafka官网地址:https://kafka.apache.org/downloads我下载的版本是3.5.0二、下载完毕之后进行解压   因为Kafka的运行依赖于Zookeeper,所以还需要下并安装Zookeeper,ZooKeeper和Kafka版本之间有一定的对应关系,不同版本的ZooKeeper和Kafka可以......
  • 易生信转录组培训第一期总结
    易生信九天的转录组分析培训班第一期伴随着5个小时的考试在紧张中结束了。说是培训,倒不如研讨更确切些。在一个个问题的交流中学会转录组分析,效果远大于一人讲,自己练。先分享两张现场的照片前两天以集中讲练为主,在讲述了原理后,进行上机操作。大部分学员有一定的Linux和R基础,上手......
  • 【项目实战】Java 开发 Kafka 生产者
    ......
  • 【项目实战】Java 开发 Kafka 消费者
    ......
  • 【项目实战】Kafka 生产者幂等性和事务
    ......
  • 【项目实战】Kafka 重平衡 Consumer Group Rebalance 机制
    ......
  • 又一本经典全面升级 豆瓣 8.5,搞透 Kafka 就看它了
    科学家们每一次发生分歧都是因为掌握的数据不够充分。所以,我们可以先就获取哪一类数据达成一致,只要获取了数据,问题也就迎刃而解了。要么我是对的,要么你是对的,要么我们都是错的,然后继续。——NeildeGrasseTyson每个应用程序都会生成数据,包括日志、指标、用户活动记录、响应消息等,......
  • 2023年发布的25个开源大型语言模型总结
    大型语言模型(llm)是一种人工智能(AI),在大量文本和代码数据集上进行训练。它们可以用于各种任务,包括生成文本、翻译语言和编写不同类型的创意内容。今年开始,人们对开源LLM越来越感兴趣。这些模型是在开源许可下发布的,这意味着任何人都可以使用、修改和分发它们。这使得研究人员、......
  • 每日总结2023年7月25日
    今日学习:排序算法的空间复杂度和空间复杂度;编译过程;有限自动机;正规式;表达式;函数调用的传值与传址;各种程序语言的特点。 明天的计划:学习科目四。 ......
  • Java面试常见问题总结
    Java面试常见问题总结Java基础Java中的几种基本数据类型是什么?对应的包装类型是什么?各自占用多少字节呢?String、StringBuffer和StringBuilder的区别是什么?String为什么是不可变的?Strings1=newString("abc");这段代码创建了几个字符串对象?==与equals?hashCo......