【问题标题】:Understanding transaction in Processor implementation in Kafka Streams了解 Kafka Streams 中处理器实现中的事务
【发布时间】:2018-01-15 07:42:05
【问题描述】:

在使用 Kafka Streams 的处理器 API 时,我使用这样的东西:

context.forward(key,value)
context.commit()

实际上,我在这里所做的是每分钟从状态存储向接收器发送一个状态(使用 init() 方法中的 context.schedule())。我在这里不明白的是:

我正在发送的 [Key,Value] 对,然后执行 commit() 来自 state store。它是根据我的特定逻辑从 许多 非顺序 输入 [key,value] 对聚合而成的。每个这样的输出 [key,value] 对都是来自输入(kafka 主题)的少数无序 [key,value] 对的聚合。所以,我不明白 Kafka 集群和 Kafka Streams lib 如何知道原始输入 [key,value] 对和最终输出 [key,value] 之间的相关性。如果 Kafka 不知道输入对和输出对之间的连接,它如何被事务包装(故障安全)。当我执行 context.commit() 时实际提交了什么?

谢谢!

【问题讨论】:

    标签: apache-kafka apache-kafka-streams


    【解决方案1】:

    详细解释所有这些超出了我可以在此处写的答案。

    基本上,如果事务被提交,当前输入主题的偏移量和对 Kafka 主题的所有写入都是原子完成的。这意味着,在提交完成之前,所有挂起的写入都会被刷新。

    事务不需要了解您的实际业务逻辑。他们只是将输入主题的进度跟踪与输出主题的写入“同步”。

    我建议阅读相应的博客文章并观看有关在 Kafka 中的“exactly-once”的讨论以获取更多详细信息:

    顺便说一句:这是关于 Streams API 中手动提交的问题。你应该考虑这个:How to commit manually with Kafka Stream?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 2019-06-02
      相关资源
      最近更新 更多