有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是Kafka针对具有依赖关系的消息的正确解决方案吗?

我们有相互依赖的消息。例如,假设我们有4条消息M1,M2,M1_update1,(应该只在处理M1之后处理),M3(应该只在处理M1,M2之后处理)

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


共 (2) 个答案

  1. # 1 楼答案

    Kafka被用作发布子消息系统,具有高度的可扩展性和容错性

    我相信,当你的信息相互依赖时,单独使用卡夫卡可能是一个糟糕的选择。您需要的处理是基于条件的,您可能需要一个路由引擎(如camel或drool)来实现最终结果

  2. # 2 楼答案

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

    就相互依赖的消息而言,这需要一个核心卡夫卡本身不提供的逻辑层。如果我理解正确,并且处理发生在从卡夫卡消费消息之后,您将需要消费者端的某种通知,它将接收和处理M1M2,并以某种方式通知另一方的生产者,现在可以发送M1_updateM3。这绝对超出了卡夫卡的核心内容。您仍然可以使用卡夫卡来构建类似的东西,但可能还有其他更适合您的解决方案