Nir*_*jan 2 apache-kafka kafka-consumer-api
您好,我正在研究 kafka CLI,以清楚地了解 kafka 的工作原理。我对消费者群体感到困惑。我创建了具有三个分区的主题。我将创建生产者来向主题提供一些数据。我第一次添加了一些数据,如下所示。
kafka-console-producer --broker-list 127.0.0.1:9092 --topic users
>user1
kafka-console-producer --broker-list 127.0.0.1:9092 --topic users
>user2
kafka-console-producer --broker-list 127.0.0.1:9092 --topic users
>user3
Run Code Online (Sandbox Code Playgroud)
现在我的理解是user1,user2,user3会随机去三个不同的分区。
创建消费者组时如下。
kafka-console-consumer --bootstrap-server localhost:9092 --topic users --group user_group
Run Code Online (Sandbox Code Playgroud)
这将为我提供所有用户1、用户2、用户3。
现在,在一个消费者群体中,我可以拥有许多消费者。如果我在消费者组内有三个消费者,那么第一个消费者将从分区1读取,第二个消费者将从消费者2读取,然后第三个消费者将从消费者3读取。这是我到目前为止的理解。如果我的理解是正确的,那么演示上述行为的 cli 命令是什么?我知道上面提到的只有一个命令会返回所有数据?如果我的上述理解是正确的那么如果所有消费者都需要所有数据那么如何获取它?有人可以帮助我理解这个概念。任何帮助将不胜感激。谢谢
小智 7
让我们首先了解分区与消费者的关系。
假设我有一个名为 T1 的主题,有 4 个分区和 1 个消费者组。在这种情况下,消费者组 1 将被分配从所有分区进行消费 -
现在,当我们将另一个消费者添加到同一个消费者组时,分区将在它们之间均匀分布 -
依此类推,当添加其他消费者时,最多可达该主题中的分区数量 -
添加超出给定主题中分区数量的更多消费者将导致空闲消费者 -
这基本上意味着您受到单个主题中分区数量的限制。
消费者如何加入Consumer Group?
当消费者想要加入消费者组时,他会JoinGroup
向组协调器发送请求。第一个加入组的人成为组长,他负责根据预定义的分配策略将分区子集分配给每个消费者。
在决定每个消费者的分区分配后,消费者领导者会将分配分区列表发送给组协调员,然后他将此信息发送给组内的所有消费者。
如何选择分配政策?
Kafka 支持很少的分配策略,可以使用partition.assignment.strategy参数进行控制。
这些策略是RangeAssignor、RoundRobinAssignor和StickyAssignor,其中默认策略是RangeAssignor。
您可以在这篇有用的博客文章中阅读有关它们的更多信息。
怎么看呢?
我会推荐像Kafka Manager这样的工具,它可以帮助您可视化消费者与主题的关系。
| 归档时间: |
|
| 查看次数: |
3097 次 |
| 最近记录: |