java - Kafka 是具有依赖关系的消息的正确解决方案吗?
问题描述
我们有相关的消息。例如。假设我们有4条消息M1,M2,M1_update1,(应该只在M1处理后处理),M3(应该只在M1,M2处理后处理)。
在这个例子中,只有 M1 和 M2 可以并行处理,其他的必须是顺序的。我知道 Kafka 主题的一个分区中的消息是按顺序处理的。但是我怎么知道 M1,M2 已处理,现在是时候将 M1_update1 和 M3 消息推送到主题了?Kafka 是这种用例的正确选择吗?任何见解表示赞赏!
解决方案
您基本上是在描述一个保证排序的消息队列。根据设计,Kafka不保证排序,除非您提到的主题具有单个分区。但是,在这种情况下,您并没有充分利用 Kafka 通过并行化分区中的数据来最大化吞吐量的能力。
至于消息相互依赖,这将需要核心 Kafka 本身不提供的逻辑层。如果我理解正确,并且处理发生在从 Kafka 消费消息之后,您将需要在消费者端进行某种通知,该通知将接收和处理M1
并M2
以某种方式通知另一端的生产者,现在可以发送M1_update
和M3
。这绝对超出了 Kafka 提供的核心范围。你仍然可以使用 Kafka 来构建这样的东西,但可能还有其他更适合你的解决方案。
推荐阅读
- python - 打印输出导致一半时间出现分割线
- sql - 确定每个客户的最高订单
- python - 从字符串转换为字节时如何正确格式化
- r - “折叠”数据列
- javascript - 使用 Javascript 过滤结果
- python - 为什么我不能使用 pip 安装 cudatookkit=10.1 但可以使用 conda?
- node.js - 访问父 Node.js 项目的 Mongoose Schemas (single db)
- crystal-reports - 在水晶报表中将不同的组保持在同一页面上
- excel - 为什么我在 excel 中的 COUNTIF 函数不起作用?
- c++ - 如何在 cmake 中指定线程依赖项以跨平台方式分发仅标头库?