Kafka 核心源码解读
胡夕
Apache Kafka Committer,老虎证券技术总监
19216 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
结束语 (1讲)
Kafka 核心源码解读
15
15
1.0x
00:00/00:00
登录|注册

32 | GroupCoordinator:在Rebalance中,Coordinator如何处理成员入组?

你好,我是胡夕。不知不觉间,课程已经接近尾声了,最后这两节课,我们来学习一下消费者组的 Rebalance 流程是如何完成的。
提到 Rebalance,你的第一反应一定是“爱恨交加”。毕竟,如果使用得当,它能够自动帮我们实现消费者之间的负载均衡和故障转移;但如果配置失当,我们就可能触碰到它被诟病已久的缺陷:耗时长,而且会出现消费中断。
在使用消费者组的实践中,你肯定想知道,应该如何避免 Rebalance。如果你不了解 Rebalance 的源码机制的话,就很容易掉进它无意中铺设的“陷阱”里。
举个小例子。有些人认为,Consumer 端参数 session.timeout.ms 决定了完成一次 Rebalance 流程的最大时间。这种认知是不对的,实际上,这个参数是用于检测消费者组成员存活性的,即如果在这段超时时间内,没有收到该成员发给 Coordinator 的心跳请求,则把该成员标记为 Dead,而且要显式地将其从消费者组中移除,并触发新一轮的 Rebalance。而真正决定单次 Rebalance 所用最大时长的参数,是 Consumer 端的 max.poll.interval.ms。显然,如果没有搞懂这部分的源码,你就没办法为这些参数设置合理的数值。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了Kafka中消费者组的Rebalance流程,重点关注了加入组的源码实现。通过详细解释handleJoinGroup方法的参数和主体代码,以及其与其他方法的交互关系,帮助读者理解了加入组的完整流程。作者通过深入分析Rebalance流程的源码实现,为读者提供了深入了解消费者组Rebalance流程的机会。 在文章中,作者详细介绍了doUnknownJoinGroup方法和doJoinGroup方法的源码实现,以及它们都会用到的addMemberAndRebalance方法。通过源码分析和图示展示了方法的流程,帮助读者理解了加入组的具体实现细节。文章通过深入分析源码实现,为读者提供了深入了解Kafka消费者组Rebalance流程的机会,尤其是加入组的具体实现细节。 总的来说,本文通过深入分析源码实现,为读者提供了深入了解Kafka消费者组Rebalance流程的机会,尤其是加入组的具体实现细节。读者可以通过本文了解到Kafka中消费者组Rebalance流程的重要性、源码实现细节以及相关方法的调用顺序,从而加深对该流程的理解。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kafka 核心源码解读》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • 胡夕
    置顶
    你好,我是胡夕。我来公布上节课的“课后讨论”题答案啦~ 上节课,我们重点学习了GroupMetadataManager类读写位移主题的源码。课后我请你分析cleanGroupMetadata方法的流程。实际上,这个方法调用带参数的同名方法cleanupGroupMetadata来执行组位移的清除。后者会遍历给定的所有消费者组,之后调用removeExpiredOffsets方法执行过期位移的清除。清除的主要依据是看当前时间与位移提交的时间的差值是否越过了offsets.retention.minutes参数值。如果越过了则视该位移为过期,需要从offsets中移除。同时,cleanupGroupMetadata方法还会构造tombstone消息并写入到内部位移主题执行主题中的过期位移消息的输出。 okay,你同意这个说法吗?或者说你有其他的看法吗?我们可以一起讨论下。
    2020-07-21
  • 肖恒
    请教下,重平衡开启前是如何处理 offset 的?

    作者回复: 会在rebalance前尝试提交位移,如果成功则okay,不成功就只能等待rebalance结束了

    2021-01-20
    1
  • 对与错
    胡哥,协调者是依据什么来的?比如一个协调者所对应的broker挂了,那么其他消费者成员会发生什么?

    作者回复: broker挂了,其他副本会成为leader,也就是新的Coordinator

    2021-01-07
    2
    1
  • 三颗豆子
    生产发现JoinGroup的监控指标时延很高,短的几秒,长的1分钟,这个正常吗?其他的全部请求时延都在2秒以下。仔细分析是在remote阶段的时延很高,remote它在等什么呢?

    作者回复: 能发下截图或具体的JMX bean吗?我去看下对应的逻辑

    2020-12-18
    4
    1
  • J.Smile
    老师您好,想问下如何能明确观察到reblance的过程,因为有时候知道发生了reblance,但是不能确认是什么原因引起的reblance,所以想通过一定手段定位下,比如tcpdump抓包,但是用wireshark打开并转为kafka协议好像也看不出reblance的过程,也可能是我用的不熟练,想请老师可以补充下这方面的,毕竟理论结合实践才是解决问题的途径。 补充说一下,好像server.log也只能看到说Reblance开始了,Member被移除。。之类等等。

    作者回复: 打开DEBUG日志,会有非常详细的日志输出,重点看看Coordinator部分的DEBUG日志

    2020-07-22
    1
  • 双椒叔叔
    胡老师,您好 分区迁移遇到的问题怎么解决呢 1038,1037,1029-----reassign----->1038,1037,1048 其实就是1029机子先宕掉了,然后我想要把死掉的1029机子上的副本迁移到1048上 但是迁移计划卡死了,一直in progress replica变成1038,1037,1048,1029了,ISR变成了1038,1048 现在我想要在replica中remove1029,我看了源码发现是状态机维护的每一个replica状态 源码中 1038,1037,1029-----reassign----->1038,1037,1048 迁移计划卡住的那步是这样的 要把1029副本的状态从replica中移除流程是 controller先把1029offline, 然后 controller发送状态改变请求(deleted)给1029 1、first move the replica to offline state (the controller removes it from the ISR) 2、send stop replica command to the old replicas 3、Eventually partition reassignment could use a callback that does retries if deletion failed 如果1029这个节点不在线的话就会 返回一个回调状态值NonExistentReplica(因为1029现在是死了的状态)。 reassignment那里的源码大概我看了下,不知道上面的理解对不对 就想问下,想这种原本3副本,现在执行迁移计划后,replica中多了一个不在线的1029,然后执行计划一直in progress 那么这种情况如何解决呢? 是直接在zk中修改该主题的问题分区(执行迁移计划卡主的那个分区)吗?生产中1k个分区,zk中不知道敢不敢修改

    作者回复: 删除zk中/admin/reassign_partitions下对应的节点然后重启broker试试呢

    2020-07-13
    1
  • 云端漫漫步
    GroupState是Stable, CompletingRebalance, Empty这三种的情况下才可以

    作者回复: ������

    2020-07-25
    2
  • 懂码哥(GerryWen)
    胡大大,您的社区名字有点意思。https://issues.apache.org/jira/secure/ViewProfile.jspa?name=huxi_2b 😀😁😝

    作者回复: 额。。。不是你想的那样:)

    2020-07-13
  • 伯安知心
    从代码上看,进入maybePrepareRebalance的时候,首先把group加入锁中,因为这里要访问消费组的元数据(线程不安全),然后只有一个判断if (group.canRebalance),这个判断主要是判断消费组元数据中的validPreviousStates的map集合中是否存在PreparingRebalance状态的数据,事实上这个状态就是一个过渡的中间状态比如某些成员加入超时的状态,所有成员离开了组,通过分区迁移删除组。

    作者回复: 👍

    2020-07-11
    2
  • z.l
    请教下,为什么消费者组非要选出一个Leader成员,直接由Coordinator计算好分区分配方案再发给每个组成员不是更简单么?Leader是否设计复杂化了?
    2022-09-23归属地:上海
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部