Apache Kafka Pub/Sub工作机制:两种分区场景下的技术疑问
Kafka 消费者组与消息订阅机制解析
首先明确核心规则:In one consumer group, each partition will be processed by one consumer only. 即在同一个消费者组内,每个分区只会被一个消费者处理——这是Kafka实现负载均衡的基础,但并不限制不同组的消费行为。
场景1:生产者无分区键/消息键,消息均匀分发时的订阅机制
当生产者未指定分区键时,消息会通过轮询策略均匀分发到主题的所有分区。此时不同订阅者的接收逻辑分两种情况:
- 不同消费者组的订阅者:每个消费者组独立维护自身的消费偏移量,组内消费者会分摊主题的所有分区。每个组都能完整消费主题内的全部消息,实现类似Pub/Sub的广播效果,所有不同组的订阅者都能收到全量消息。
- 同一消费者组的订阅者:组内消费者是负载均衡关系,每个消费者仅处理分配给自己的分区消息,不会重复接收同一条消息。这种模式用于实现消息的并行处理,而非广播。
场景2:生产者向特定分区发送消息时的订阅机制
生产者通过指定分区键或直接指定分区,将消息发送到特定分区时,订阅者的接收逻辑分两种情况:
- 不同消费者组的订阅者:只要该组内有消费者被分配到这个特定分区,就能收到该分区的消息。每个消费者组独立消费,不受其他组影响,因此其他组的订阅者只要负责对应分区,就能获取这条消息。
- 同一消费者组的订阅者:只有当前被分配到该特定分区的消费者能收到这条消息,组内其他消费者因未绑定该分区,无法获取这条消息。
单个分区仅绑定一个消费者时,其他消费者获取同一条消息的方式
要让其他消费者获取同一条消息,核心方案是让这些消费者归属不同的消费者组。Kafka的分区消息是持久化存储的,每个消费者组拥有独立的消费偏移量,不同组可以同时消费同一个分区的消息,彼此的消费进度互不干扰。同一组内的消费者是竞争分摊分区的关系,而不同组则是独立订阅的关系,以此实现同一条消息被多个订阅者接收的需求。
内容的提问来源于stack exchange,提问作者Praful Bagai
相关产品推荐
相关产品推荐

