【问题标题】:how to make sub-topics in Kafka如何在 Kafka 中制作子主题
【发布时间】:2018-02-14 15:42:43
【问题描述】:

我试图在 Kafka 中表示 TopicsSub-topics。 示例:主题“体育”子主题“足球”、“手球”

据我所知,Kafka 不支持这一点。我现在使用的是这样的主题 'Sports_Football''Sports_Handball'... 这并不是真正的功能,因为当我们需要主题“体育”和所有潜艇时,我们需要查询所有主题。

我们也在使用 RedisApache Storm。那么请问有没有更好的方法呢?

【问题讨论】:

    标签: redis apache-kafka apache-storm


    【解决方案1】:

    你是对的。 Kafka 中没有“子主题”之类的东西,但是,消费所有以“体育”开头的主题是微不足道的。假设您使用的是 Java,一旦您初始化了消费者,请使用方法 consumer.subscribe(Pattern.compile("^Sports_.+")) 订阅您的“子主题”。现在调用consumer.poll(timeout) 将读取所有以“Sports_”开头的主题。

    这样做的唯一缺点是,当添加新的“Sports_”主题时,消费者必须重新订阅。

    【讨论】:

      【解决方案2】:

      Apache Kafka 不支持它,你是对的。但是 Kafka 支持消息分区。 Kafka 提供了保证,即所有具有相同密钥的消息都进入同一个分区。

      您可以使用所有分区,也可以只使用一个。因此,您基本上可以为每项运动设置不同的键以分隔消息。

      【讨论】:

      • 这在很大程度上是正确的,但是每个分区可能包含多个键,因此无法保证从单个分区消费只会返回一种特定类型的键而不更改分区分配策略.当然可以,但这并不是真正的分区精神。
      • @kellanburket 是的,当然。你是完全正确的。在这种情况下,您只需处理少量数据。
      • 分区,用于分发进程。它是自动分配的。改变分配策略是一个安全的想法吗?
      • @MaherBenTalebAli 就像 leshkin 所说,这取决于每个“子主题”相对于其他“子主题”的大小,但我个人建议不要这样做。您不仅会损害更大“子主题”的性能,而且更改策略还需要您仔细管理主题分区的数量,当您添加新的“子主题”时增加数量(您还必须更新策略在代码中),这可能很快成为一场噩梦。如果分区为空,分配给这些分区的消费者将保持空闲状态。
      【解决方案3】:

      还有使用 Redis 流的选项, 使用 kafka-redis-connector 您可以将数据推送到 Redis 流。 但请考虑 Redis 流的优缺点。

      另一个有趣的解决方案是使用 Kafka Streams,因此您可以创建子主题。 Broker(Sport) ==> Sport_Stream(Football, Handball) ==> Consumer 可以从 Broker 接收主题或从 Stream 接收子主题。

      【讨论】:

        猜你喜欢
        • 2020-05-30
        • 2020-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-18
        • 2021-08-19
        • 2016-07-26
        相关资源
        最近更新 更多