Kafka 消费者:消费者轮询的准备工作(十五)

  • 在拉取消息前需要确保
    • 客户端已经连接上协调者
    • 消费者收到协调者分配给它的分区
  • 消费者拉取消息的准备工作
    • 连接协调者
    • 向协调者发送请求加入消费组,从协调者获取分配的分区

一、消费者拉取消息前的顺序

  • 消费者向协调者申请加入消费组
  • 服务端存在管理消费者的协调者,协调者将消费者加入消费组
  • 协调者为所有消费者分配分区
  • 消费者从协调者获得分配给它的分区
  • 消费者拉取分区的消息

二、发送请求并获取结果

  • 每个消费者都要向协调者发送 JoinGroupRequest(加入消费组的请求),每个消费者从 JoinGroupResponse(加入消费组的响应)中获取分配的分区
  • 流程伪代码如下,真实代码在 AbstractCoordinator 的 joinGroupIfNeeded 方法中
// 消费者向协调者发送加入消费组的请求,并得到分配分区
// 发送 JoinGroup 请求
JoinGroupResponse joinResult = sendJoinGroupRequest();
// 获取分区
Assignment assignment = partitionAssignment(joinResult);
// 更新状态
subscriptions.assignFromSubscribed(assignment.partitions());

在这里插入图片描述

  • 实际情况是要等待所有消费者都加入消费组后才能执行分配分区的算法,所以刚开始返回的是一个异步对象 Future
// 在异步请求对象上轮询,如果没有完成,会一直循环
RequestFuture<JoinGroupResponse> future = sendJoinGroupRequest();
client.poll
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值