【问题标题】:Is stream processing atomic / transactional when using at least once delivery in Kafka Streams?在 Kafka Streams 中至少使用一次交付时,流处理是原子的/事务的吗?
【发布时间】:2019-06-25 06:53:02
【问题描述】:

让我们假设一个像这样的简单案例:

ORDER_TOPIC ----> KSTREAM ----> VALIDATED_ORDER_TOPIC
                     |
          ROCKSDB LOCAL STATE STORE

KStream 使用带有转换器的转换操作对来自 ORDER_TOPIC 的消息进行重复数据删除,该转换器通过其键/ID 将消息存储在持久的本地状态存储中。这样,如果同一订单两次到达,它将被忽略。

现在有一个新订单到达,它没有重复,因此它存储在本地存储中,但在将其发送到 VALIDATED_ORDER_TOPIC 之前,应用程序崩溃了。

我想知道 KStream 中的事务保证是什么:记录是被存储并提交到本地状态存储还是回滚?

您能否指出一些有关具有至少一次语义的 Kafka 流的事务保证的文档?

【问题讨论】:

    标签: apache-kafka apache-kafka-streams


    【解决方案1】:

    如果您使用至少一次语义运行,则没有事务保证。对于这种情况,如果您首先将 ID 添加到存储中,但在将记录写入输出主题之前发生崩溃,则在从输入主题重新处理时,您可能会丢失该记录。

    如果你想去重复,你需要启用processing.guarantees=exactly_once。对于这种情况,如果您崩溃,存储将“回滚”到一致状态。即,崩溃后,只有写入输出主题成功时才会包含 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多