kafka 消费者

消费者

消费者。消费者连接到Kafka上并接收消息,进而进行相应的业务逻辑处理。

消费组

消费者负责订阅Kafka中的主题,并且从订阅的主题上拉取消息。

消费组:每个消费者都有一个对应的消费组,每一个分区只能被一个消费组中的一个消费者所消费。

消费组的三个特性:

  • 消费组可以有一个或多个消费者。
  • Group ID 是一个字符串,在 kafka 集群中标识唯一的一个消费组。
  • Topic 下的某一个分区只能由一个消费组中的某一个消费者消费。

消费者与消费组这种模型可以让整体的消费能力具备横向伸缩性,我们可以增加(或减少)消费者的个数来提高(或降低)整体的消费能力。对于分区数固定的情况,如果消费者过多,出现了消费者的个数大于分区个数的情况,就会有消费者分配不到任何分区。

消费者的个数最多不超过分区数。

分区再平衡

主动再平衡

在进行主动再均衡期间,所有消费者都会停止读取消息,放弃分区所有权,重新加入消费组,并获得重新分配到的分区。这样会导致整个消费组在一个很短的时间窗口内不可用。这个时间窗口的长短取决于消费组的大小和几个配置参数。

两个阶段:

  1. 所有消费者都放弃分区所有权。
  2. 消费者重新加入群组,获得重新分配到的分区,并继续读取消息。
协作再均衡

协作再均衡(也称为增量再均衡)是指将一个消费者的部分分区重新分配给另一个消费者,其他消费者则继续读取没有被重新分配的分区。这种再均衡包含两个或多个阶段。

  1. 消费组leader会通知所有消费者,它们将失去部分分区的所有权,然后消费者会停止读取这些分区,并放弃对它们的所有权。
  2. 消费组leader会将这些没有所有权的分区分配给其他消费者。

虽然这种增量再均衡可能需要进行几次迭代,直到达到稳定状态,但它避免了主动再均衡中出现的"停止世界"停顿。

消费者会向被指定为群组协调器的broker(不同消费组的协调器可能不同)发送心跳,以此来保持群组成员关系和对分区的所有权关系。心跳是由消费者的一个后台线程发送的,只要消费者能够以正常的时间间隔发送心跳,它就会被认为还"活着"。

如果消费者在足够长的一段时间内没有发送心跳,那么它的会话就将超时,群组协调器会认为它已经"死亡",进而触发再均衡。

如果一个消费者发生崩溃并停止读取消息,那么群组协调器就会在几秒内收不到心跳,它会认为消费者已经"死亡",进而触发再均衡。在这几秒时间里,"死掉"的消费者不会读取分区里的消息。在关闭消费者后,协调器会立即触发一次再均衡,尽量降低处理延迟。

相关推荐
zquwei2 小时前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring
道一云黑板报6 小时前
Flink集群批作业实践:七析BI批作业执行
大数据·分布式·数据分析·flink·kubernetes
qq_5470261796 小时前
Kafka 常见问题
kafka
core5126 小时前
flink sink kafka
flink·kafka·sink
飞来又飞去8 小时前
kafka sasl和acl之间的关系
分布式·kafka
MZWeiei9 小时前
Zookeeper的监听机制
分布式·zookeeper
莹雨潇潇9 小时前
Hadoop完全分布式环境部署
大数据·hadoop·分布式
浩哲Zhe10 小时前
RabbitMQ
java·分布式·rabbitmq
明达技术10 小时前
分布式 IO 模块:赋能造纸业,革新高速纸机主传动
分布式
Allen Bright11 小时前
RabbitMQ中的Topic模式
分布式·rabbitmq