Stream Kafka流的简单分类

Stream Kafka流的简单分类,stream,apache-kafka,state,apache-kafka-streams,Stream,Apache Kafka,State,Apache Kafka Streams,我目前正试图找到一种直接、高效的方法,用卡夫卡流对记录进行分类。 所有记录至少包含一个id和一个failed属性。 (id只是一个字符串,failed是布尔值) 其思想是,在开始时,将所有传入的记录分类为“消息”。 一旦其中一个传入记录设置了failed字段,就应该在某个地方“持久化”,并将该记录分类为“failed” 从现在起,无论是否设置了failed属性,具有相同id的每个传入记录也应归类为“失败” 我正在考虑使用Kafka Streams的内部状态存储(与交互式查询功能一起使用),或者使

我目前正试图找到一种直接、高效的方法,用卡夫卡流对记录进行分类。
所有记录至少包含一个
id
和一个
failed
属性。
id
只是一个字符串,
failed
是布尔值)

其思想是,在开始时,将所有传入的记录分类为“消息”。
一旦其中一个传入记录设置了failed字段,就应该在某个地方“持久化”,并将该记录分类为“failed”

从现在起,无论是否设置了
failed
属性,具有相同
id
的每个传入记录也应归类为“失败”

我正在考虑使用Kafka Streams的内部状态存储(与交互式查询功能一起使用),或者使用外部数据库,每次输入记录时都会对其进行查询。我认为卡夫卡的国家商店本身听起来是一个更轻量级的解决方案

这里有一个小概念草图,希望有助于理解这个问题。

有人知道如何以正确的方式解决这个问题吗

多谢各位 祝你一切顺利
-蒂姆

我觉得你的方法不错。但不要认为你需要智商特征。只需定义一个自定义的
转换器
,并在其上附加一个键值存储。在处理过程中,如果收到
failed=true
的消息,则将ID放入存储。对于每个
failed=false
的传入消息,您还需要检查存储区,以检查是否存在具有相同ID的先前失败消息


要持久保存失败的消息,您只需将流分成两部分(可能使用
branch()
并将
failed
消息写入一个特殊主题。

非常感谢Matthias,这种方法看起来非常干净和可靠。我现在正在实施。