kafka ack如何批量生成AsyncProducer

时间:2016-07-14 16:27:54

标签: apache-kafka kafka-producer-api

使用批处理异步生产者时,kafka如何发送确认? ack是每个消息/每批次/每个子批次(即每个分区的批次)? 是否建议在异步批处理prdocuer中使用ack?或者更好的只是使用回调机制?

2 个答案:

答案 0 :(得分:0)

在使用批处理异步生产者时,kafka如何发送ack

通过更新se Future或执行回调代码来选择。

  • java.util.concurrent.Future发送(ProducerRecord 记录)
  • java.util.concurrent.Future发送(ProducerRecord 记录,回调回调)

确认是按消息/按批次/按子批次(即按分区分配)

好问题。我认为确认是针对整个请求的,因此该请求的所有消息(但不确定,我没有找到信息)

是否建议在异步批处理prdocuer中使用ack?或更好 只是使用回调机制?

这是两个不同的概念,如果不执行future,则send始终与kafka保持异步。 如果要分批发送许多记录,则必须无阻碍地发送。 (无需每次都执行future.get())

答案 1 :(得分:0)

“使用批处理异步生产器时,kafka如何发送ack?ack是按消息/按批处理/按子批处理(即按分区按批处理)吗?”

每个批次发送确认(也意味着:每个分区)。如果批处理中的一个或多个单个消息失败,则整个批处理均视为失败。根据您的重试配置,然后将重新发送该批处理。

“是否建议在异步批处理prdocuer中使用ack?还是仅使用回调机制更好?”

我认为这不是一个非此即彼的问题。您可以拥有acks>0并同时使用回调。通常,acks设置使您可以独立于任何回调来提高Producer的稳定性。

如果您需要了解发送失败的原因的全部详细信息,则应使用回调。我在我的另一篇文章中提供了关于Producer Callback Exceptions的更多详细信息。

此外,您可以使用异步生产者的回调来处理手动提交,同时避免如Kafka Consumer offset commit check to avoid committing smaller offsets

中所述由于退休而提交较低的偏移量。