如果我在kafka流中设置commit.interval.ms =的值,是否可以提交偏移量?

时间:2018-08-10 08:47:26

标签: java apache-kafka apache-kafka-streams

我正在尝试了解与偏移提交有关的 kafka流的行为。由于在Streams中将自动提交设置为“ false”,因此Streams的提交偏移量是手动的。如果我保留commit.interval.ms = 0,流是否可以正常工作怎么办?

2 个答案:

答案 0 :(得分:1)

通过将config参数设置为零毫秒,您要完成什么工作?根据官方文档,流的默认值为100毫秒:

  

请注意,如果将'processing.guarantee'设置为'exactly_once',则默认   值为100,否则默认值为30000。

来自Kafka Streams官方文档-https://kafka.apache.org/documentation/#streamsconfigs

已更新:

根据您的评论,我相信是的,您应该能够将提交存储在外部数据库中,并且提交间隔配置仍然适用。

此外,请务必仔细阅读有关在Kafka之外存储偏移量的含义的文档-https://kafka.apache.org/20/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#rebalancecallback

答案 1 :(得分:1)

如果您设置commit.interval.ms = 0,Kafka Streams将“尽快”提交。在实现中,有一个poll-process-loop检查是否需要提交。如果您设置commit.interval.ms = 0,则此检查将每次评估为true,因此每次都会进行提交。

当检查提交条件时,这是内部实现细节,并且没有公共合同规定如何检查条件。请注意,不建议过于频繁地提交,因为这会给Kafka Streams客户端和代理增加额外的负担,因为提交是同步操作,而不是免费的。

从评论中:

  

我们要检查是否可以将提交存储在外部db ..中,所以我们想知道是否可以仅在db端实现偏移提交管理

使用Streams API,您不能将偏移量存储在外部数据库中。 Kafka Streams使用Kafka的群组管理并提交API,您无法更改。