0

所以,我是 Kafka 的新手,我已经阅读了一段时间。我在 confluent 上找到了这些信息。

https://docs.confluent.io/current/streams/architecture.html

所以我从中了解到的是,假设我有一个名为 plain_text 的主题,我只是将一堆记录作为纯文本发送,而我只有一个具有单个主题和单个分区的代理。我现在启动 2 个消费者实例 ConsumerA 和 ConsumerB。由于我的分区计数小于消费者计数,因此只有一个消费者应该主动消费消息,而另一个消费者则处于空闲状态。如果我错了,请纠正我。

我使用 kafka-console-* 脚本进行了测试

启动 Zookeeper 集群

bin/zookeeper-server-start.sh config/zookeeper.properties

在 localhost:9092 上启动一个 kafka 代理

bin/kafka-server-start.sh config/server.properties

创建一个带有一个分区的纯文本主题

bin/kafka-topics.sh --create \
    --bootstrap-server localhost:9092 \
    --replication-factor 1 \
    --partitions 1 \
    --topic plain_text

开始制作人

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic plain_text

启动属于同一组的 2 个消费者(运行相同的命令两次)

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 \
    --topic plain_text \
    --formatter kafka.tools.DefaultMessageFormatter \
    --property print.key=true \
    --property print.value=true \
    --property group.id=test_group \

因此,两个消费者中的一个应该拥有该单个分区(如果我错了,请再次纠正我),但是我在生产者控制台上生成的任何内容在两个消费者控制台上都是可见的。为什么两个消费者都在使用来自单个分区的消息。是否有我遗漏的东西或适用于 kafka-console-* 脚本的不同规则。

4

1 回答 1

5

如果未指定,每次运行 kafka-console-consumer 都会创建不同的消费者组 ID,您可以使用以下命令进行检查:

kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list | grep console-consume
console-consumer-68642
console-consumer-30430

您可以添加--group your_group_name--consumer-property group.id=your_group_name专门注册group.id您的控制台消费者

于 2020-03-20T04:25:45.410 回答