我们有相关消息,例如。假设我们有4条消息M1,M2,M1_update1(仅在处理M1之后才应处理),M3(应在处理M1,M2之后才应处理)。
在此示例中,只有M1和M2可以并行处理,其他的则必须是顺序的。我知道Kafka主题的一个分区中的消息是按顺序处理的。但是我怎么知道已经处理了M1,M2,现在是时候将M1_update1和M3消息推送到主题了吗?卡夫卡是这种用例的正确选择吗?任何见解表示赞赏!
答案 0 :(得分:0)
Kafka被用作具有高度可扩展性和容错能力的发布订阅消息系统。
我相信,当您的消息相互依赖时,单独使用kafka可能是一个错误的选择。您需要的处理是基于条件的,可能您需要诸如骆驼或口水之类的路由引擎才能达到最终结果。
答案 1 :(得分:0)
您基本上是在描述保证排序的消息队列。按照设计,Kafka不会不保证排序,除非您提到的情况是主题只有一个分区。但是,在那种情况下,您并没有充分利用Kafka通过并行处理分区中的数据来最大化吞吐量的功能。
就消息彼此依赖而言,这将需要核心Kafka本身不提供的逻辑层。如果我理解正确,并且处理是在从Kafka消费完消息之后发生的,那么您将需要在消费者端进行某种通知,该通知将接收并处理M1
和{{ 1}},并以某种方式通知另一边的生产者,现在可以发送M2
和M1_update
。这绝对超出了Kafka提供的核心范围。您仍然可以使用Kafka来构建类似的内容,但是可能还有其他更适合您的解决方案。