【发布时间】:2020-03-31 17:49:48
【问题描述】:
我有一个场景,系统 A 将从系统 B 获取信息。
选项/场景
B 将向一个主题发送消息,供 A 与同一主题的其他消费者一起消费 优点 - 对于 B 事情会很简单 缺点 - A 必须消费所有与 A 无关的消息
B 会将消息发送到仅供 A 使用的主题 优点 - A 只会收到与 A 相关的消息 缺点 - B 必须发送到仅适用于 A 用例的不同主题
B 将由 A 托管的 REST API 优点 - A 不必担心消息消耗 缺点 - B 必须为一个消费者 A 调用 API,这不是一种可扩展的方法。
为了提供更多信息,在我的例子中,与 B 发送给 A 的所有消息相比,与 A 相关的消息数量非常少
如果 A 感兴趣的消息数量非常少(比如 x 天 100 条)与主题中发布的总消息数量(x 天几百万)相比,那么 A 是否有理由阅读所有这些都来自选项 1 中的主题。
从生产者 (B) 的角度来看,C 听起来并不好,因为 B 无法为每个有类似需求的新消费者调用 API。
在我努力寻找更好的解决方案(如果有的话)的同时想知道其他想法。
以下更新
选项 4 B 将向 A 的主题发送消息,以便 A 与同一主题的其他消费者一起消费,但其密钥可用作 A 的过滤/拒绝。
选项 4 听起来更好,并且会探索更多。
【问题讨论】:
-
我看不到任何其他选择,除了 1) 从长远来看是可行的;如果 A 感兴趣的信息发生变化怎么办?对于其他情况,您必须调整 B。选项 2 可能适用,但这实际上取决于您系统的整体架构 - 如果某个主题上的消息过多而不是针对消费者,那就会开始成为一种气味。
标签: java apache-kafka system-design