我有一个kafka主题HrEvents
,其中包含很多Hire
,Fire
,Quit
,Promotion
和Demotion
消息。每个HR事件消息都有一个employee_id
属性(也是用于分区的键)和一个data
属性,其中可以包含有关HR事件的任意详细信息。
问题是我的应用程序需要处理的各种data
斑点没有得到很好的记录,并且有可能在任何时候消耗HR事件,而应用程序无法过程。
对于每个employee_id
,应用程序应按顺序处理所有HR事件,这一点很重要。同样重要的是,在影响 one employee_id
的处理失败之后,所有 other employee_id
的所有HR事件都可以继续。
失败的HR事件以及同一employee_id
的所有后续HR事件应发布到死信队列中。修补应用程序后-并且添加了对data
blob的另一种非文档形式的支持-这些HR事件可以从死信队列中使用。
我意识到这还需要在使用者中维护某种形式的密钥黑名单,在其中存储employee_id
,其中至少有一个未使用的HR事件消息位于死信队列中。
是否存在允许我实现此问题的解决方案的现有解决方案/ java库?
请原谅我的无知,但我正在尝试解决上述问题的解决方案,但我怀疑我可能没有使用正确的术语进行搜索。随时教育我。
答案 0 :(得分:1)
听起来您应该可以使用Kafka Streams。
您的死信队列可以建立一个KTable,它构成一种黑名单。当原始主题中出现新事件时,您将针对现有ID对KTable执行查找,并将传入事件附加到尚未处理该ID的事件的值列表中