网上有很多文章讲述 Kafka rebalance 的原理,本文是列举常见的几种 rebalance 场景:

  1. 如果一个 consumer 刚启动,则会向 broker 发送 JoinGroup 请求,加入 group ,被分配一个 member id ,触发一次 rebalance 。
  2. 如果一个 consumer 终止,不再运行。则等到 Heartbeat 超时,broker 会认为该 consumer 下线,触发一次 rebalance 。
  3. 上述 consumer 启动、终止的情况通常不频繁,可以容忍它触发 rebalance 。但有的情况下,consumer 会频繁启动、终止,比如被 k8s HPA 改变 consumer 数量。
    • 解决方案:额外开发一个应用,称为 dispatcher ,让它作为唯一的 consumer 连接到 broker ,获取消息。而原本的应用连接到 dispatcher ,间接获取消息。
    • 使用 dispatcher 还能解决另一个问题:group 中的 consumer 数量,大于当前 topic 的 partition 数量,导致部分 consumer 空闲、不能消费。
  4. 如果一个 consumer 终止,然后又重启。则不记得自己之前的 member id ,依然会发送 JoinGroup 请求,加入 group ,被分配一个新的 member id ,触发一次 rebalance 。
    • 而旧的 member id 不再使用,等到 Heartbeat 超时,又会触发一次 rebalance 。因此 consumer 重启时会触发两次 rebalance 。
    • 解决方案:Kafka v2.3 开始,consumer 增加了配置参数 group.instance.id ,用于避免 consumer 重启时触发 rebalance 。
      • 给该参数赋值为非空字符串时,consumer 会从默认的 Dynamic Member 类型变成 Static Member 类型,并采用该参数的值作为 client.id。
        当 consumer 重启之后发送 JoinGroup 请求时,Coordinator 会识别出它是 Static Member ,属于 rejoin ,因此分配一个新 member id ,并删除旧的 member id 。
        这样不会触发 rebalance ,除非 consumer 重启太慢,导致 Heartbeat 超时。
      • 日志示例:
        INFO   [GroupCoordinator 1]: Static member Some(static_member_1) of group test_group_1 with unknown member id rejoins, assigning new member id static_member_1-cdf1c4ea-2f1c-4f4d-bc46-bf443e5f7322, while old member id static_member_1-8b5d89b3-0757-4441-aeaa-50e7f9f55cee will be removed.
        INFO    [GroupCoordinator 1]: Static member which joins during Stable stage and doesn't affect selectProtocol will not trigger rebalance.
        
      • 如果一个 group 中只运行了一个 consumer ,则用户手动配置一个固定的 group.instance.id 即可。
      • 如果一个 group 中运行了多个 consumer ,则用户需要在客户端增加一些代码,自动给每个 consumer 配置一个互不相同的、持久不变的 group.instance.id 。
  5. 如果一个 consumer 消费太慢,连续调用 poll() 的间隔超过 max.poll.interval.ms ,则会导致 Heartbeat 超时,触发 rebalance 。
    • 解决方案:增加 max.poll.interval.ms ,或者优化 consumer 客户端代码,比如减少每次拉取的数据量从而减少消费耗时、从同步消费改为异步消费。

Kafka rebalance 的几种原因与解决方案相关推荐

  1. java.lang.NullPointerException出现的几种原因及解决方案

    java.lang.NullPointerException是java编程中最常见的异常之一.任何使用java的人都有在java程序以及java web应用程序中看到java.lang.NullPoi ...

  2. 电脑开机就黑屏的几种原因以及解决方案

    电脑一开机就黑屏的原因有哪些,分别怎么解决 一般来说,电脑一开机就黑屏也分两种 第一种是屏幕完全黑的,造成这种现象的原因有以下几种 1.内存接触不良 这种情况我们一般是先将内存条取下来清理内存条跟主板 ...

  3. 表格无法无法计算机,无法打开Excel表的几种原因的解决方案

    有人总是报告无法打开excel表单,但是其他Excel表单却可以打开,非常沮丧,那么如果无法打开excel表单怎么办,今天,seo实验室的编辑教您无法使用excel表单由于多种原因无法打开解决方案. ...

  4. vs报错“错误 LNK2019 无法解析的外部符号”的几种原因及解决方案

      运行vs程序的时候,报错严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 "__declspec(dllimport) public: void ...

  5. 电脑显示屏不亮但是主机已开机?5种原因以及解决方案

    电脑与我们的日常生活和工作密切相关,缺了它我们工作就很难正常展开.电脑使用久了,难免出现一些小问题,比如:电脑显示屏不亮但是主机已开机,这是什么原因造成的?我们应该怎么处理? 可能很多人无从下手,但是 ...

  6. eclipse安装后,出现“can not create the java virtual machine”错误的另一种原因和解决方案

    最近遇到了"can not create the java virtual machine"的错误,经过网上查阅,大多数答案为原因1: 原因1:系统当前内存不足,无法启动: 也有人 ...

  7. 神经网络训练不稳定问题(loss和accuracy波动大)的一种原因及解决方案

    用LSTM做时间序列预测时发现训练刚开始时loss(MSE)下降很快,accuracy(调整R方)上升也很快,但到后面loss总体上下降变慢,并且时有波动,accuracy甚至会经常出现负值,然后又回 ...

  8. Kafka中产生数据积压的原因以及解决方案

    Kafka中产生数据积压的原因以及解决方案 1.kafka中数据积压的原因 kafka作为消息队列,其中数据积压也是经常遇到的问题之一.我们都知道,数据积压的直接原因,一定是系统中的某个部分出现了性能 ...

  9. javaheapspace解决方案_高手总结的9种 OOM 常见原因及解决方案

    当 JVM 内存严重不足时,就会抛出 java.lang.OutOfMemoryError 错误.本文总结了常见的 OOM 原因及其解决方法,如下图所示.如有遗漏或错误,欢迎补充指正. 1.Java ...

最新文章

  1. .net里鼠标选中的text数据怎么获取_Python数据科学实践 | 爬虫1
  2. 从“创业输家”到“创智赢家”
  3. pandas使用select_dtypes函数移除dataframe中指定数据类型的数据列(exclude columns based on the data type in dataframe)
  4. 修改js文件需要重启服务器,关于Node.js中频繁修改代码重启服务器的问题
  5. easyui 去掉按钮 虚线框
  6. linux下基于apache下的svn的搭建
  7. mysql正则表达式关键字_《MySQL必知必会》正则表达式
  8. 【PAT】A1028 List Sorting
  9. asmr刷新失败无法连接上服务器_App Store显示无法连接怎么解决?两个步骤足够了...
  10. 【Google 行销课】 初学者投放AdWords容易出现的26个错误
  11. 张朝阳:知识直播是长久的事情 商业模式将水到渠成
  12. Gitlab+Jenkins学习之路(四)之gitlab备份和恢复
  13. android studio线性渐变,使用Kotlin实现文字渐变TextView的代码
  14. 354. 俄罗斯套娃信封问题--(每日一难phase2--day9)
  15. 浅谈Ajax的blockUI
  16. 战舰世界显示无法连接服务器失败,王美雪:战舰世界无法连接服务器解决方法 无法登陆怎么办...
  17. 梯度消失和梯度爆炸原因,表现,解决方案
  18. markdown流程图语法
  19. ListView实现倒计时功能
  20. 金山毒霸把我的oracle监听服务,金山毒霸误杀我的i_eyes.exe

热门文章

  1. 隐私保护-联邦学习同态
  2. Spring 多数据源 @Transactional 注解事务管理
  3. 实战源码,PP-LiteSeg集速度快、精度高、易部署等为一体,行业应用实战必备
  4. 三星手机可以升级鸿蒙吗,上市不到三个月就下架,华为今年最短命手机诞生,还不能升级鸿蒙...
  5. SpringMvc集成Springfox使用Swagger写文档和测试
  6. ::before 和::after 中双冒号和单冒号有什么区别、作 用
  7. CGAL-Triangulation中的单元和面的关系
  8. 智领云科技入选2022中国数据智能领域最具商业潜力科技企业TOP20榜单|「甲子20」榜单揭晓|甲子引力...
  9. 七夕这个早上,全都用来挖Filecoin了
  10. 计算机专业,专升本的在校日常