首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向同一消费者组内的所有订户广播消息

向同一消费者组内的所有订户广播消息
EN

Stack Overflow用户
提问于 2020-01-09 17:49:39
回答 2查看 315关注 0票数 1

使用apache-Kafka版本2.11-2.4.0。

我正在创建一个应用程序,我想在其中向同一消费者组中的所有订阅者(消费者)发布事件。但在许多地方,我发现Kafka向消费者群体广播消息。有没有办法做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-09 18:17:45

在Kafka中,消费者群体只是为了水平扩展。例如,如果您在同一个消费者组中有5个消费者,并且订阅了一个有5个分区的主题,那么Kafka会将每个分区分配给组中的一个消费者。因此,消息由消费者并行消费。

在你的例子中,如果你想消费来自多个消费者的相同消息,那么你需要有多个消费者组来订阅相同的主题。您可以通过为您的消费者设置不同的group.id来实现此目的。

注意:作为一种良好的做法,您在消费者组中的消费者数量应该与订阅的主题的分区数量相同。

票数 2
EN

Stack Overflow用户

发布于 2020-01-10 19:27:06

您可以通过手动将消息的副本发送到每个分区来实现这一点。您可以使用admin client,并执行如下操作(假设使用java)来获取某个主题的所有分区:

代码语言:javascript
复制
List<String> topicName = Arrays.asList("topic-name");
List<TopicPartitionInfo> partitions = 
        adminClient.describeTopics(topicName)
                   .values()
                   .get("topic-name")
                   .get()
                   .partitions();

partitions列表为每个分区包含一个对象,该对象可用于显式地生成记录以

代码语言:javascript
复制
partitions.stream().forEach(x -> {
    ProducerRecord<Key, Value> record = new ProducerRecord<>("topic-name", x, someKey, someValue);
    kafkaProducer.send(record);
});

一如既往,这不是生产级代码,只是一个示例。还要注意的是,如果您有一个消费者订阅了多个分区,他们将多次收到您的消息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59661234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档