【问题标题】:Do Kafka's parallelism concepts apply when running in console mode?在控制台模式下运行时,Kafka 的并行概念是否适用?
【发布时间】:2020-07-01 05:46:26
【问题描述】:

所以,我是 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-* 脚本适用不同的规则。

【问题讨论】:

    标签: apache-kafka kafka-consumer-api kafka-producer-api kafka-partition


    【解决方案1】:

    如果未指定,每次运行 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

    【讨论】:

    • 我已经编辑过了,我忘记在我的命令中提到 group.id。
    • @Shubhangb 很好,我已经编辑在您的问题中添加了一个单独的更新部分,以便其他人不会误解。谢谢
    猜你喜欢
    • 2012-04-14
    • 1970-01-01
    • 2011-08-29
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多