Kafka,commitSync成功

时间:2019-01-15 13:22:01

标签: apache-kafka kafka-consumer-api

我正在尝试确定是否需要使用KafkaConsumer.commitSync(Map offsets)打开手动提交

当我使用记录时,我需要确保它们能被我的服务处理,但我无法承担失去这些记录的负担,但是如果我的服务抛出了很多错误或崩溃,我不希望继续使用偏移量我知道它们已经被处理。

commitSync看起来像我需要调用的方法吗?

如果我不使用commitSync而是使用自动偏移量提交,当尝试处理一些Kafka事件时服务崩溃时,我是否有可能丢失事件。换句话说,在使用自动偏移提交时,在什么时候提交偏移?

2 个答案:

答案 0 :(得分:4)

如果您不使用KafkaConsumer::commitSync而是选择了自动提交机制,则不会丢失任何消息,但是可以多次处理同一条消息,例如,如果您处理消息并保存结果到某个地方并且您的应用程序崩溃(在保存偏移量之前,将自动提交),重新启动之后,您的应用程序将从上次提交的偏移量开始处理,并且可能导致同一条消息将被重新处理几次。

如果您使用KafkaConsumer::commitSync,也会发生相同的情况,但是在这种情况下,手动管理提交可以在处理每条消息之后进行提交,最多只能重新处理一条消息。缺点是吞吐量较低。

答案 1 :(得分:1)

我同意@wardziniak的回答。因此,我认为,这完全取决于用例-流中包含的消息类型以及对消息的反应方式。

例如,在CQRS系统中,处理命令将需要同步提交,而将数据写入RDBMS投影可能会与异步提交一起正常工作。