与一个Kafka主题的多个使用者管理消息

时间:2018-07-25 19:10:54

标签: design-patterns apache-kafka kafka-consumer-api kafka-producer-api

我正在利用Apache Kafka实现一个工作流,在那里我有多个生产者和多个消费者。

简而言之,类似于订单处理工作流,其中:

  • 制作人接收并发布主题的“订单” 。 Consumer_1接受“订单”,对其进行验证,然后将相同的“订单”发布到同一主题。
  • Consumer_2收到“有效订单” 并检查库存 仓库。确认后,它将向同一主题发布相同的“订单”。
  • Consumer_3收到“ 已确认并仓库确认的订单”并发送 分发给同一主题等...

我已经创建了一个类型为“订单”的对象,供我的消费者使用State作为本地变量进行处理,每个消费者在完成后都会对其进行更新。

使用以上多个生产者/消费者的方法和一个主题,我看到一个问题,即保持消息状态(已验证,已确认仓库,已发送等)的问题,其中每个消费者都必须处理所有消息并检查状态是否对应于当前消费者的责任。同样,使用这种方法,所有消费者都必须属于不同的消费者组,以便接收所有消息(这是不理想的),从而确认所有消息(即使不是发往他们的消息)。

我考虑过的其他方法是创建多个主题(每个“状态”一个),但是在这种情况下,我的“订单”消息将用于发布到多个主题,这似乎违反了卡夫卡原则。

我还可以创建不同的订单“类型”,即ValidatedOrder,WarehouseConfirmedOrder,DispatchedOrder,从而删除我的使用者中的状态检查,而是引入一个“类型”过滤器,这与我的原始状态解决方案非常相似。

这里可以应用哪些最佳实践和替代技术?

关于上述内容的任何文档都可以指向我吗?

0 个答案:

没有答案