Java 延迟kafka手动提交偏移量会产生什么影响

Java 延迟kafka手动提交偏移量会产生什么影响,java,apache-kafka,kafka-consumer-api,Java,Apache Kafka,Kafka Consumer Api,我们希望手动提交kafka偏移量以控制数据丢失事件。但是我们可能会延迟manaul提交,因为我们只想在持久化到数据源之后才这样做 我想了解减慢提交偏移量是如何影响kafka的主题/并行性/分区的。如果您从一个主题消费,如果该消费者属于一个消费者组,kafka将确保一个消费者消费一个分区。因此,如果您手动提交,它将不会影响其他使用者,因为他们从另一个分区进行消费 但如果将同一分区使用者与enable.auto.commit=false和enable.auto.commit=true进行比较,则启用

我们希望手动提交kafka偏移量以控制数据丢失事件。但是我们可能会延迟manaul提交,因为我们只想在持久化到数据源之后才这样做


我想了解减慢提交偏移量是如何影响kafka的主题/并行性/分区的。如果您从一个主题消费,如果该消费者属于一个消费者组,kafka将确保一个消费者消费一个分区。因此,如果您手动提交,它将不会影响其他使用者,因为他们从另一个分区进行消费

但如果将同一分区使用者与
enable.auto.commit=false
enable.auto.commit=true
进行比较,则启用自动提交的使用者吞吐量相对较高。如果您不需要确认您的提交,那么使用commitSync,它将比commitSync提高吞吐量

通常,在完成批处理中的所有消息时调用API,并且在提交批处理中的最后一个偏移量之前不轮询新消息。这种方法会影响吞吐量和延迟,轮询时返回的消息数也会影响吞吐量和延迟,因此可以将应用程序设置为不太频繁地提交

但是,如果手动提交,当使用者重新启动或重新平衡时,可能会出现重复的已使用消息。当您使用消息并写入数据库时,之后您将向Kafka提交消息。如果此时使用者重新平衡或重新启动,则该消息将不会提交,并将被同一组中的另一使用者重新使用

有关更多信息,请参阅


卡夫卡的主题/并行/分区是什么意思?@RanLupovich我们至少实施了一次(因为我们有一个重复数据消除机制)。我的意思是,从sec开始,我对消息进行轮询,直到我手动提交为止,“缓冲”时间是否会对其他消费者产生影响?e、 g在我提交之前,他们将无法使用消息等等。@nipuna我在问推迟手动提交对kafka集群会有什么影响。它是否会延迟其他消费者(同一主题的消费者)继续轮询来自同一主题的新邮件?谢谢您的回复。您写道“如果您手动提交,它不会影响其他消费者,因为他们从另一个分区消费”,但是如果我从不同的消费者组消费,并且其中一个消费者延迟手动提交,会发生什么情况?会有什么影响?不会影响其他消费者。因为这是一个不同的过程,我指的是卡夫卡不同的群体和不同的消费者会议。因此,按照你所说的,如果手动提交从被轮询的那一刻起一直延迟到实际的提交事件,那么无论如何都不会产生任何影响