首页 > 解决方案 > Kafka 是具有依赖关系的消息的正确解决方案吗?

问题描述

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

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

标签: javaspringapache-kafkakafka-consumer-api

解决方案


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

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


推荐阅读