Kafka抵消混乱(消费者端)

问题描述 投票:0回答:1

我最近一直在阅读有关 Kafka 的文章,对它还很陌生。很多地方说,Kafka永远不会跟踪分区的

offset
,客户端必须记住这个状态。其中一个地方就是这个
https://docs.datastax.com/en/kafka/doc/kafka/kafkaHowMessages.html
上面的页面上写着这个

Topic partitions contain an ordered set of messages and each message in the partition has a unique offset. 
Kafka does not track which messages were read by a task or consumer.

但是,我正在阅读其他来源,例如这个

https://kafka.apache.org/090/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html

另一个来源(丢失了链接)说使用唯一的三元组

groupId, topic, partition
我们可以使用不同的偏移提交策略,这可能会导致
exactly once
at least once
等场景。他们解释了以下方案的优缺点
auto-commit
vs
commitSync
vs
commitAsync
这让我相信,只要指定了上述三元组并使用提交 API,即使我的客户端(比如在 K8 docker 容器中运行)崩溃并出现一个新实例向上,我可以从卡夫卡本身偏移(基本上我什至不必担心),我将从正确的偏移开始读取(当然,恰好一次、丢失消息、至少一次发挥作用的场景) .

那么是哪一个呢? DataStax 链接准确吗?我在不止一个地方读过它。 现在很混乱。一些使用 Kafka 的 Spring Boot 文章也讨论了这种提交场景。

apache-kafka spring-kafka
1个回答
0
投票

我不熟悉 datastax,但决定取决于你 - 跟踪外部偏移量并在应用程序启动时执行搜索,或者让 Kafka 跟踪最后提交的偏移量,并在消费者使用时自动为其设置位置重新开始。

大多数人选择后者(这是 Spring 的默认行为)。

也许 datastax 可以做到前者。

© www.soinside.com 2019 - 2024. All rights reserved.