Kafka是具有依赖项的消息的正确解决方案吗?

时间:2018-10-16 18:04:52

标签: java spring apache-kafka kafka-consumer-api

我们有相关消息,例如。假设我们有4条消息M1,M2,M1_update1(仅在处理M1之后才应处理),M3(应在处理M1,M2之后才应处理)。

在此示例中,只有M1和M2可以并行处理,其他的则必须是顺序的。我知道Kafka主题的一个分区中的消息是按顺序处理的。但是我怎么知道已经处理了M1,M2,现在是时候将M1_update1和M3消息推送到主题了吗?卡夫卡是这种用例的正确选择吗?任何见解表示赞赏!

2 个答案:

答案 0 :(得分:0)

Kafka被用作具有高度可扩展性和容错能力的发布订阅消息系统。

我相信,当您的消息相互依赖时,单独使用kafka可能是一个错误的选择。您需要的处理是基于条件的,可能您需要诸如骆驼或口水之类的路由引擎才能达到最终结果。

答案 1 :(得分:0)

您基本上是在描述保证排序的消息队列。按照设计,Kafka不会保证排序,除非您提到的情况是主题只有一个分区。但是,在那种情况下,您并没有充分利用Kafka通过并行处理分区中的数据来最大化吞吐量的功能。

就消息彼此依赖而言,这将需要核心Kafka本身不提供的逻辑层。如果我理解正确,并且处理是在从Kafka消费完消息之后发生的,那么您将需要在消费者端进行某种通知,该通知将接收并处理M1和{{ 1}},并以某种方式通知另一边的生产者,现在可以发送M2M1_update。这绝对超出了Kafka提供的核心范围。您仍然可以使用Kafka来构建类似的内容,但是可能还有其他更适合您的解决方案。