【问题标题】:Kafka best way to achieve message filteringKafka实现消息过滤的最佳方式
【发布时间】:2020-04-22 14:22:15
【问题描述】:

想知道以下情况的最佳方法。

在微服务项目中:一个应用程序(生产者)正在发布消息,这些消息正在被许多其他下游应用程序使用。有些消息是针对第一个应用程序的,一些是针对第二个应用程序的,一些是针对第三个应用程序的,依此类推。什么是最好的方式,让消费者只消费那些对他们有意义的消息。

我应该有 1 个主题和分区数等于否。消费者和发布消息时使用密钥,因此每个分区将由一个特定的消费者使用。

或每个消费者有 1 个主题,每个主题中有 1 个分区或多个分区?

我们还应该考虑将来消费者数量是否增加,那么我们的解决方案应该能够轻松处理。

【问题讨论】:

  • 不同的应用程序是否从主题中读取重叠消息?还是说部分消息打算由一个消费者阅读?
  • 有些消息需要被所有应用程序读取,但有些消息是特定于特定应用程序(消费者)的

标签: apache-kafka


【解决方案1】:

您不应该尝试使用分区来路由到消费者,因为分区是为了可扩展性,虽然您可以确定相同的密钥将进入同一个分区,但您无法随时知道哪个消费者将从该分区消费。

因此每个主题的分区数与您的问题无关,应设置为考虑到未来的扩展需求。

您的选择是使用单个主题、每个消费者应用程序的主题还是介于两者之间。

只要每个应用程序中的消费者与其他应用程序中的消费者在一个单独的组中,单个主题就可以了,这样每个应用程序都可以获取所有消息。缺点是每个人都必须过滤掉他们不感兴趣的消息。

每个应用程序的主题也可能没问题,尽管它给您带来了生产者必须知道将消息路由到哪里的开销,这可能导致复杂的配置。

另一种方法是基于消息类型的逻辑拆分来创建主题,其中几个应用程序可能订阅一个主题,一些应用程序可能订阅几个主题,它们可能对所有消息都不感兴趣,但生产者不需要知道谁在消费,只需要知道消息与哪个逻辑区域相关(由您决定如何划分主题和消息类型)

【讨论】:

    【解决方案2】:

    在我看来,这听起来像是使用 Kafka 的一个很好的用例。

    我建议不要重复数据并将所有消息处理到具有多个分区一个主题。从 Kafka 处理数据随分区数量而变化,因此我会根据您预期的数据量和所需的吞吐量来设置数量。如果您对分区主题中的消息顺序有要求,您可以在生产者中使用自定义分区器来引导数据分布到该主题中。请注意,Kafka 中消息的顺序只能在一个分区内得到保证。

    订阅此 Kafka 主题的消费者应尽可能独立于生产者。所以我不会试图让生产者为消费者“做点什么”。理想情况下,生产者不需要了解消费者的任何信息,特别是如果您计划在未来添加更多消费者。

    消费者也应该彼此独立并且都使用不同的消费者组。这样每个消费者都可以控制独立地从主题中读取数据。另外,在失败的情况下,消费者可以独立地从头开始重新读取Kafka主题的数据,而不会影响任何其他消费者。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多