你会怎么样 commitSync()
或者它是一个变体,当一个重新平衡发生时,不是因为当前消费者的失败,而是因为同一组中其他消费者的失败。
假设,在总共10个分区中,消费者1(c1)被分配了分区1和分区2(p1和p2)。c1已经完成poll()并从p1(偏移量400到500)和p2(偏移量1300到1400)中提取了200条记录,然后处理它们并准备提交。但是在c1的poll()和commit之间,其他一些使用者失败了,并且发生了重新平衡。c1被分配到分区p4和p6。现在c1是否仍然能够将偏移提交给p1和p2(他之前被分配给p1和p2),或者是否会导致类似这样的异常 CommitFailedException
?
1条答案
按热度按时间j2cgzkjk1#
来自java文档
public void commitsync()
为所有订阅的主题和分区列表在上一次poll()时返回的提交偏移量。
这是一个同步提交,将被阻止,直到提交成功或遇到不可恢复的错误(在这种情况下,它将被抛出给调用方)。
对于commitsync,如果在调用commitsync之前发生了重新平衡,那么提交将失败并出现异常。
因此,在您的示例中,分配给分区p1和p2的新使用者将再次读取消息
获得对再平衡更多控制的一种方法是实现ConsumerBalanceListener,它具有
答。已取消分区
b。已分配分区