我正在利用Apache Kafka实现一个工作流,在那里我有多个生产者和多个消费者。
简而言之,类似于订单处理工作流,其中:
我已经创建了一个类型为“订单”的对象,供我的消费者使用State作为本地变量进行处理,每个消费者在完成后都会对其进行更新。
使用以上多个生产者/消费者的方法和一个主题,我看到一个问题,即保持消息状态(已验证,已确认仓库,已发送等)的问题,其中每个消费者都必须处理所有消息并检查状态是否对应于当前消费者的责任。同样,使用这种方法,所有消费者都必须属于不同的消费者组,以便接收所有消息(这是不理想的),从而确认所有消息(即使不是发往他们的消息)。
我考虑过的其他方法是创建多个主题(每个“状态”一个),但是在这种情况下,我的“订单”消息将用于发布到多个主题,这似乎违反了卡夫卡原则。
我还可以创建不同的订单“类型”,即ValidatedOrder,WarehouseConfirmedOrder,DispatchedOrder,从而删除我的使用者中的状态检查,而是引入一个“类型”过滤器,这与我的原始状态解决方案非常相似。
这里可以应用哪些最佳实践和替代技术?
关于上述内容的任何文档都可以指向我吗?