如何在 Kafka 中制作子主题

how to make sub-topics in Kafka

我试图在 Kafka 中表示 主题 子主题。 示例:主题 'Sports' 子主题 'Football'、'Handball'

据我所知,Kafka 不支持这一点。我现在使用的是这样的主题 'Sports_Football' , 'Sports_Handball'... 这不是真正的功能,因为当我们需要时,当我们想要带有所有子项的主题 'Sports' 时,我们需要查询它的所有主题。

我们还使用 RedisA​​pache Storm。那么请问有更好的方法吗?

你是对的。在 Kafka 中没有 "subtopic" 这样的东西,但是,消费所有以单词 'Sports' 开头的主题是微不足道的。假设你正在使用 Java,一旦你初始化了一个消费者,使用方法 consumer.subscribe(Pattern.compile("^Sports_.+")) 订阅你的 "subtopics." 调用 consumer.poll(timeout) 现在将从所有以 [= 开头的主题读取19=].

这样做的唯一缺点是,当添加新的 'Sports_' 主题时,消费者将不得不重新订阅。

Apache Kafka 不支持,你是对的。但是 Kafka 支持消息分区。 Kafka 提供保证,所有具有相同密钥的消息都将发送到同一分区。

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

还有使用 Redis 流的选项, 使用 kafka-redis-connector 可以将数据推送到 Redis 流。 但请考虑 Redis 流的好处和不便。

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