【问题标题】:What is the impact if delay kafka manual commit offset如果延迟kafka手动提交偏移有什么影响
【发布时间】:2021-06-10 16:20:34
【问题描述】:

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

我想了解减慢提交偏移量如何影响 kafka 的主题/并行性/分区(如果有的话)

【问题讨论】:

  • kafka's topic/paralalism/partition 是什么意思?
  • @RanLupovich 我们至少实施了一次(因为我们有一个去重机制)。我是说从我轮询消息的那一刻起,直到我手动提交,这个“缓冲”时间是否会以某种方式影响其他消费者?例如,在我提交等之前,他们将无法使用消息。
  • @nipuna 我在问延迟手动提交对 kafka 集群有什么影响。无论如何它会延迟(同一主题的)其他消费者继续轮询来自同一主题的新消息吗?

标签: java apache-kafka kafka-consumer-api


【解决方案1】:

当您从一个主题消费时,如果该消费者属于一个消费者组,Kafka 将确保一个分区被一个消费者消费。因此,如果您手动提交,它不会影响其他消费者,因为他们从另一个分区消费。

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

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

但是,如果您进行手动提交,当消费者重新启动或重新平衡时,可能会出现重复的消费消息。当你消费一条消息并写入你的数据库时,你将把消息提交给 Kafka。如果此时消费者重新平衡或重新启动,该消息将不会被提交,并将被同一组中的另一个消费者重新消费。

更多信息请参考

【讨论】:

  • 感谢您的回复。你写了“所以如果你手动提交它不会影响其他消费者,因为他们从另一个分区消费”但是如果我从不同的消费者组消费并且其中一个消费者延迟手动提交会发生什么?会产生什么影响?
  • 不会影响其他消费者。因为这是一个不同的过程,我的意思是 Kafka 的不同组和不同的消费者会话。不依赖于此。
  • 因此,如果手动提交从轮询到实际提交事件的那一刻被延迟,那么按照您所说的,无论如何都不会发生任何影响
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 2018-02-07
  • 2019-07-01
相关资源
最近更新 更多