当 运行 处于控制台模式时,Kafka 的并行概念是否适用?

Do Kafka's parallelism concepts apply when running in console mode?

所以,我是 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

创建一个主题plain_text,只有一个分区

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-* 脚本。

如果没有指定,每个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