卡夫卡死信队列,仅用于具有相同密钥的邮件

时间:2020-03-04 16:29:24

标签: java apache-kafka event-sourcing blacklist dead-letter

我有一个kafka主题HrEvents,其中包含很多HireFireQuitPromotionDemotion消息。每个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库?


请原谅我的无知,但我正在尝试解决上述问题的解决方案,但我怀疑我可能没有使用正确的术语进行搜索。随时教育我。

1 个答案:

答案 0 :(得分:1)

听起来您应该可以使用Kafka Streams。

您的死信队列可以建立一个KTable,它构成一种黑名单。当原始主题中出现新事件时,您将针对现有ID对KTable执行查找,并将传入事件附加到尚未处理该ID的事件的值列表中