在控制台模式下运行时,Kafka 的并行概念是否适用?

Shu*_*g b 0 apache-kafka kafka-consumer-api kafka-producer-api kafka-partition

所以,我是 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
Run Code Online (Sandbox Code Playgroud)

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

bin/kafka-server-start.sh config/server.properties
Run Code Online (Sandbox Code Playgroud)

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

bin/kafka-topics.sh --create \
    --bootstrap-server localhost:9092 \
    --replication-factor 1 \
    --partitions 1 \
    --topic plain_text
Run Code Online (Sandbox Code Playgroud)

开始制作人

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic plain_text
Run Code Online (Sandbox Code Playgroud)

启动属于同一组的 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 \

Run Code Online (Sandbox Code Playgroud)

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

Tuy*_*ong 5

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

kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list | grep console-consume
console-consumer-68642
console-consumer-30430
Run Code Online (Sandbox Code Playgroud)

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