在使用Kafka Streams的处理器API时,我使用以下内容:
context.forward(key,value)
context.commit()
实际上,我在这里做的是每分钟从州商店向前发送一个状态(使用init()方法中的context.schedule())。我不明白的是:
[Key,Value]对我发送前进然后执行commit()来自状态存储。它根据我的特定逻辑汇总来自许多 非顺序输入[key,value]对。每个这样的输出[key,value]对是来自输入(kafka主题)的少数未排序 [key,value]对的聚合。所以,我不明白Kafka集群和Kafka Streams lib如何知道原始输入[key,value]对与最终输出[key,value]之间的相关性。如果Kafka不知道输入对和输出对之间的连接,它如何被事务包装(故障安全)。当我做context.commit()时,实际上提交了什么?
谢谢!
答案 0 :(得分:1)
详细解释所有这些内容超出了我在答案中所能写的内容。
基本上,当提交事务时,当前的输入主题偏移量和对Kafka主题的所有写入都是以原子方式完成的。这意味着,在提交完成之前刷新所有挂起的写入。
交易不需要了解您的实际业务逻辑。他们只是将输入主题的进度跟踪与输出主题的写入“同步”。
我建议您阅读相应的博客文章,并在卡夫卡观看有关一次性的讨论,以获取更多详细信息:
顺便说一句:这是关于Streams API中手动提交的问题。你应该考虑这个:How to commit manually with Kafka Stream?