Kafka消费者客户端心跳请求

1. 发起心跳请求

在Consumer客户端启动的时候,就会构建心跳监测线程HeartbeatThread并启动,

心跳监测线程名:kafka-coordinator-heartbeat-thread|group.id

例如:kafka-coordinator-heartbeat-thread | consumer0


    /**
    * Java学习资料
    * wx: javataozi888
    **/
    private boolean enabled = false;

    private synchronized void startHeartbeatThreadIfNeeded() {
        if (heartbeatThread == null) {
            heartbeatThread = new HeartbeatThread();
            heartbeatThread.start();
        }
    }

虽然这个时候启动了, 但是run方法里面有个逻辑标志为enabled=false,实际上这个时候并不会发出心跳监测的。

它会根据整个消费组的状态变化而变化。

1.1 启动心跳线程

比如, 当我们的消费者客户端发起JoinGroupRequest并成功回调, 则就会设置enabled=true

JoinGroupResponseHandler#handle

从下面的代码可以看到, JoinGroupRequest回调的时候,把客户端的状态流转为了 COMPLETING_REBALANCE,并启动的监测线程

1.2 暂停心跳线程

  1. 当客户端的状态变更为 UNJOINED 或者 PREPARING_REBALANCE 的时候
  2. 又或者心跳线程有异常的时候

那么心跳线程就会暂时停止, 因为 UNJOINED 或者 PREPARING_REBALANCE 的状态 本身并不需要去定时检查协调器在不在线, 并不关心。

1.3 发起心跳请求

有个相关的配置如下

熟悉描述默认值heartbeat.interval.ms消费者协调器与消费者协调器之间的心跳间隔时间,心跳用于确保消费者的会话保持活跃,并在新的消费者加入或者离开Group的时候促进Rebalance, 该值必须设置为低于session.timeout.ms,但通常应该设置为不高于该值的1/3, 也可以设置得更低3000(3 秒)


    synchronized RequestFuture<Void> sendHeartbeatRequest() {
        log.debug("Sending Heartbeat request with generation {} and member id {} to coordinator {}",
            generation.generationId, generation.memberId, coordinator);
        HeartbeatRequest.Builder requestBuilder =
                new HeartbeatRequest.Builder(new HeartbeatRequestData()
                        .setGroupId(rebalanceConfig.groupId)
                        .setMemberId(this.generation.memberId)
                        .setGroupInstanceId(this.rebalanceConfig.groupInstanceId.orElse(null))
                        .setGenerationId(this.generation.generationId));
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值