卡夫卡消费者在由于其他消费者失败而发生重新平衡后尝试提交时的行为?

Kafka Consumer behaviour when trying to commit after a rebalance has happened due to some other consumer failure?

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

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

来自java doc

public void commitSync()
Commit offsets returned on the last poll() for all the subscribed list of topics and partitions.
This is a synchronous commits and will block until either the commit succeeds or an unrecoverable error is encountered (in which case it is thrown to the caller).

对于commitSync,如果在调用commitSync之前发生了rebalance,commit将异常失败。
因此,在您的情况下,分配给分区 P1 和 P2 的新消费者将再次读取消息

获得对再平衡更多控制的一种方法是实现 ConsumerRebalanceListener,它具有
的方法 一种。 onPartitionsRevoked
b. onPartitionsAssigned