【问题标题】:Kafka, commitSync on successKafka,commitSync 成功
【发布时间】:2019-01-16 08:46:14
【问题描述】:

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

当我使用记录时,我需要确保它们被我的服务处理,我不能丢失它们,但如果我的服务抛出一堆错误或崩溃,我不想移动偏移量,直到我知道它们已被处理。

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

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

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我同意@wardziniak 的回答。因此,在我看来,这完全取决于用例 - 您的信息流中有什么类型的消息以及您对它们的反应。

      例如,在 CQRS 系统中,处理命令需要同步提交,而将数据写入 RDBMS 投影可能会很好地使用异步提交。

      【讨论】:

      • 为什么 CQRS 需要同步提交?
      猜你喜欢
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2018-03-14
      相关资源
      最近更新 更多