生产者:将数据写入 Kafka 的客户端。
消费者:从 Kafka 中读取数据的客户端。
Topic:Kafka 中用于组织和存储数据的逻辑概念,类似于数据库表。
Record:发送到 Topic 的消息称为 Record。
Partition:Topic 的分区,用于水平扩展和提高并发性能。
Offset:表示 Record 在 Partition 中的顺序。
Consumer Group:一组消费者共同消费一个 Topic 中的数据。
Broker:Kafka 集群中的一个节点,用于存储和处理数据。
Consumer Group State:由 Broker 写入名为 __consumer_offsets 的内部 Kafka topic 的消费者组状态。
Consumer Group ID:标识具有独立状态的消费者组的参数。
Consumer Group Coordinator:负责管理 Consumer Group State 的 Broker。
Consumer Group Assignment Strategy:确定如何将分区分配给 Consumer Group 中的消费者。
Kafka 提供了两种 Consumer Group Assignment Strategy:
Range Assignment Strategy:该策略将 Topic 的每个 Partition 按照 Partition ID 进行排序,然后将它们平均分配给 Consumer Group 中的每个消费者。这样,每个消费者都会消费一些连续的 Partition。
Round Robin Assignment Strategy:该策略将 Topic 的所有 Partition 均匀地分配给 Consumer Group 中的每个消费者。这样,每个消费者都会按照顺序消费一些 Partition,然后再从头开始。
可以通过在 Consumer Group 中设置 partition.assignment.strategy 参数来选择使用哪种 Consumer Group Assignment Strategy。
默认情况下,Kafka 使用 Range Assignment Strategy。
Primie Number of Partitions Issue:如果 Topic 中的分区数为质数,则可能会导致某些 Consumer Group 中的消费者比其他 Consumer Group 中的消费者消耗更少的分区。
Multiple Consumer Groups:多个 Consumer Group 可以独立地读取同一个具有自己独立状态的 Topic。
Consumer Group Rebalance:在 Consumer Group 中添加或删除消费者时,分配策略会重新平衡分区分配。
在 Kafka 中,Consumer Group Rebalance 是指在 Consumer Group 中添加或删除消费者时,重新分配 Topic 的分区的过程。Consumer Group Rebalance 由 Consumer Group Coordinator(负责管理 Consumer Group State 的 Broker)触发,并使用 Consumer Group Assignment Strategy(确定如何将分区分配给 Consumer Group 中的消费者)重新平衡分区分配。
Consumer Group Rebalance 的过程如下:
当 Consumer Group 中添加或删除消费者时,Consumer Group Coordinator 触发 Consumer Group Rebalance。
Consumer Group Coordinator 使用 Consumer Group Assignment Strategy 重新平衡分区分配。
Consumer Group Coordinator 将新的分区分配方案写入名为 __consumer_offsets 的内部 Kafka topic。
消费者使用 __consumer_offsets topic 中的信息来恢复其消费进度,并继续消费数据。
Consumer Group Rebalance 是 Kafka 中一个重要的概念,它可以帮助实现高可用性和伸缩性。但是,如果 Consumer Group Rebalance 发生过于频繁,就可能会影响 Kafka 集群的性能和稳定性。因此,在使用 Kafka 时,需要合理地设置 Consumer Group 的数量和消费者数量,以避免过于频繁的 Consumer Group Rebalance。