我正在尝试了解与偏移提交有关的 kafka流的行为。由于在Streams中将自动提交设置为“ false
”,因此Streams的提交偏移量是手动的。如果我保留commit.interval.ms = 0
,流是否可以正常工作怎么办?
答案 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,您无法更改。