【问题标题】:Kafka Consumer behaviour when trying to commit after a rebalance has happened due to some other consumer failure?由于其他消费者失败而发生重新平衡后尝试提交时的Kafka消费者行为?
【发布时间】:2021-07-18 16:15:09
【问题描述】:

commitSync() 或其变体如果不是由于当前消费者失败而是由于同一组中的其他消费者失败而发生重新平衡时会发生什么。

比如说,消费者 1 (c1) 被分配了分区 1 和 2(p1 和 p2),总共有 10 个分区。 c1 执行了 poll() 并从 p1(偏移量 400 到 500)和 p2(偏移量 1300 到 1400)获取了 200 条记录,然后处理它们并即将提交。但是在 c1 的 poll() 和提交之间,其他一些消费者失败了,并且发生了重新平衡。 C1 被分配到分区 p4 和 p6。现在 c1 仍然能够将偏移量提交给 p1 和 p2 (他之前被分配到)还是会导致像 CommitFailedException 这样的异常?

【问题讨论】:

  • 也许这回答了你的问题:stackoverflow.com/questions/60924842/…
  • @Mike,来自上述 - "This can happen when a group rebalance completes before the commit could be successfully applied." - 这解决了我的问题

标签: apache-kafka kafka-consumer-api


【解决方案1】:

来自java doc

公共无效 commitSync()
所有订阅的主题和分区列表的最后一次 poll() 返回的提交偏移量。
这是一个同步提交,并且会阻塞直到提交成功或遇到不可恢复的错误(在这种情况下,它会被抛出给调用者)。

对于 commitSync,如果在调用 commitSync 之前发生了重新平衡,则提交将失败并出现异常。
因此,在您的情况下,分配给分区 P1 和 P2 的新使用者将再次读取消息

获得对重新平衡的更多控制的一种方法是实现具有
方法的 ConsumerRebalanceListener 一种。 onPartitionsRevoked
湾。 onPartitionsAssigned

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-06-19
  • 2020-08-04
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
相关资源
最近更新 更多