Kafka rebalance 的几种原因与解决方案

这篇具有很好参考价值的文章主要介绍了Kafka rebalance 的几种原因与解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

rebalance 期间,当前 consumer group 的所有 consumer 都要暂停消费,开销较大。因此应该尽量减少 rebalance ,而 relalance 的原因通常是 consumer 数量变化,常见的几种情况如下:文章来源地址https://www.toymoban.com/news/detail-430348.html

  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 消费太慢,连续调用 poll() 的时间间隔超过 max.poll.interval.ms ,也会导致 Heartbeat 超时,触发 rebalance 。
    • 解决方案:增加 max.poll.interval.ms 阈值,或者优化 consumer 客户端代码,例如减少每次拉取的数据量从而减少消费耗时、更快地开始下一次消费,例如从同步消费改为异步消费。
  5. 如果一个 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 值。
        例如以 k8s StatefulSet 方式部署多个 consumer ,它们的 Pod 名称会从 0 开始编号。可让每个 consumer 通过环境变量读取自己的 POD_NAME ,用作 group.instance.id 。

到了这里,关于Kafka rebalance 的几种原因与解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 抓紧收藏,Selenium无法定位元素的几种解决方案

    01、frame/iframe表单嵌套 WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌的页面元素无法直接定位。 解决方法 : driver.switch_to.frame ( id/name/obj ) switch_to.frame()默认可以直接取表单的id或name属性。如果没有可用的id和name属性,可以先定位到frame/iframe,再将定位

    2024年02月20日
    浏览(42)
  • idea连接数据库失败的几种解决方案

    1、先进入名字为mysql的数据库 2、找到user表 3、修改root的host为% [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pWeP9cRh-1677664942027)(https://img2023.cnblogs.com/blog/3103012/202302/3103012-20230227175245772-1975389509.jpg)] 方法一和方法二,都是开放root的权限为所有人可

    2024年02月04日
    浏览(51)
  • Selenium无法定位元素的几种解决方案(超详细整理)

    🍅 视频学习: 文末有免费的配套视频可观看 🍅  关注公众号【互联网杂货铺】,回复 1  ,免费获取软件测试全套资料,资料在手,涨薪更快 WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌的页面元素无法直接定位。 解决方法: driver.switch_to.frame(id/

    2024年02月20日
    浏览(50)
  • IDEA自动补全&提示功能消失的几种解决方案

    编程工具的智能补全功能对于开发人员来说非常重要。它可以帮助节省时间和减少错误,提高编码效率和质量。 智能补全功能可以在编码过程中自动提示可能的函数、变量、等,并提供相应的选项供开发人员选择。这可以帮助开发人员更快速地完成代码,避免拼写错误

    2024年04月15日
    浏览(41)
  • Kafka数据丢失原因及解决方案

    Kafka包括Producer、Broker、Consumer,因此从这三个方面分析。 丢失原因:Kafka在Producer端的消息发送采用的是异步发送的方式(还有同步发送,但是同步发送会导致消息阻塞、需要等待),丢失数据是因为消息没有到达Broker端,原因可能是网络波动导致没有回调和数据消息太大超出

    2024年02月14日
    浏览(32)
  • kafka千万级数据积压原因以及解决方案

    一、原因 kafka作为消息队列,其中数据积压也是经常遇到的问题之一。 我们都知道,数据积压的直接原因,一定是系统中的某个部分出现了性能问题,来不及处理上游发送的数据,才会导致数据积压。 那么我们就需要分析在使用kafka时,如何通过优化代码以及参数配置来最大

    2024年02月12日
    浏览(45)
  • kafka乱序消费可能的原因和解决方案

    Kafka乱序消费可能的原因有以下几个: 分区顺序:Kafka中的消息按照分区进行存储和分发,每个分区内的消息是有序的,但不同分区之间的消息顺序是无法保证的。如果消费者在多个分区上进行并行消费,并且不处理消息的顺序,那么消费顺序可能会混乱。 消费者并发度:当

    2024年01月25日
    浏览(33)
  • Kafka消息发送失败的常见原因及解决方案

    1.1、网络故障 网络故障是Kafka消息发送失败的最常见原因之一。当网络出现故障时,Kafka就无法将消息发送到目标主题或分区。 解决方法: - 检查网络连接是否正常。 - 增加Kafka生产者的重试次数和超时时间。 1.2、分区副本不可用 如果Kafka生产者将消息发送到一个不可用的分

    2024年02月03日
    浏览(63)
  • Html2canvas——图片空白的几种排查解决方案

    下列文章来源该篇   一、工作原理 html2canvas库的工作原理并不是真正的“截图”,而是读取网页上的目标DOM节点的信息来绘制canvas,所以它并不支持所有的css属性。 二、在 img标签中加载外部图片 前提是外部图片允许跨域,需要服务器设置 以nginx为例,response-header内要存在

    2024年03月20日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包