我目前正在尝试使用Kafka Streams找到一种直接且高效的方式来对记录进行分类
所有记录至少包含id
和failed
属性
(id
只是一个字符串,failed
是布尔值)
这个想法是,在开始时,将所有传入的记录分类为" message"。
一旦其中一个传入的记录设置了失败的字段,这应该是"持久的"在某处,记录应归类为"失败"。
从现在开始,具有相同id
的传入记录应归类为"失败"同样,无论是否设置了failed
属性。
我正在考虑使用Kafka Streams的内部State Store(连同交互式查询功能)或每次记录进入时都会查询的外部数据库。我认为Kafka的State Store本身听起来像是一个更轻量级的解决方案。
有人知道如何以正确的方式解决这个问题吗?
谢谢 祝一切顺利 - 蒂姆
答案 0 :(得分:3)
你的方法听起来不错。不要以为你需要IQ功能。只需定义自定义Transformer
并附加键值存储即可。在处理过程中,如果您收到failed=true
的消息,则将ID放入商店。对于每个带有failed=false
的传入邮件,您还要检查商店以检查是否存在具有相同ID的先前失败邮件。
要保留失败的消息,您只需将您的流分成两部分(可以使用branch()
并将failed
条消息写入特殊主题。