Kafka,关于成功的承诺

xqkwcwgp  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(246)

我试图弄清楚是否需要使用kafkaconsumer.commitsync(Map偏移量)启用手动提交
当我使用记录时,我需要确保它们被我的服务处理,我不能失去它们,但是如果我的服务抛出一堆错误或崩溃,我不想移动偏移量,直到我知道它们已经被处理。
commitsync看起来像是我需要调用的方法吗?
如果我没有使用commitsync,而是使用自动偏移提交,那么当一个服务在尝试处理几个kafka事件时崩溃时,是否有可能丢失事件。换句话说,当使用auto offset commit时,在什么时候提交偏移量?

r3i60tvu

r3i60tvu1#

我同意@wardziniak的回答。所以,在我看来,这完全取决于用例——流中有什么类型的消息,以及对它们的React。
例如,在cqrs系统中,处理命令将需要一个同步提交,而将数据写入rdbms投影可能可以很好地处理异步提交。

mdfafbf1

mdfafbf12#

如果你不使用 KafkaConsumer::commitSync 选择自动提交机制,您不会丢失任何消息,但可以多次处理同一消息,例如,如果您处理消息并将结果保存在某个位置,而您的应用程序会崩溃(在保存偏移量之前将自动提交),重新启动后,应用程序将从上次提交的偏移量开始处理,这可能会导致同一消息被重新处理多次。
如果您使用 KafkaConsumer::commitSync ,但在这种情况下,手动管理提交可以在处理每条消息后提交,最多只能重新处理一条消息。这样做的缺点是吞吐量较低。

相关问题