【问题标题】:Kafka message filteringKafka 消息过滤
【发布时间】: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


【解决方案1】:

选项 4 是一个更好的主意,因为在这种情况下 A 只会读取与其相关的消息。因此,在为 A 配置使用者时,您只能分配包含 A 的分区键的分区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    相关资源
    最近更新 更多