Kafka GroupCoordinator机制(十七):GroupCoordinator之onGroupLoaded和onGroupUnloaded分析

本文详细解析了Kafka中消费者组的onGroupLoaded与onGroupUnloaded方法,阐述了如何更新成员心跳及在元数据卸载前进行状态切换和清理操作,确保消费组的稳定运行。

onGroupLoaded更新member心跳

  private def onGroupLoaded(group: GroupMetadata) {
    group synchronized {
      info(s"Loading group metadata for ${group.groupId} with generation ${group.generationId}")
      assert(group.is(Stable))
      group.allMemberMetadata.foreach(completeAndScheduleNextHeartbeatExpiration(group, _))
    }
  }

onGroupUnloaded在GroupMetadata被删除前,将ConsumerGroup状态切换成Dead,并根据之前的消费者组状态进行相应的清理操作。.

  private def onGroupUnloaded(group: GroupMetadata) {
    group synchronized {
      info(s"Unloading group metadata for ${group.groupId} with generation ${group.generationId}")
      val previousState = group.currentState
      // 切换到Dead状态
      group.transitionTo(Dead)

      previousState match { // 根据Consumer Group之前的状态进行处理
        case Dead =>
        case PreparingRebalance =>
        // 调用全部member的awaitingJoinCallback回调函数,返回指定错误码
          for (member <- group.allMemberMetadata) {
            if (member.awaitingJoinCallback != null) {
              member.awaitingJoinCallback(joinError(member.memberId, Errors.NOT_COORDINATOR_FOR_GROUP.code))
              // 清空awaitingSyncCallback回调函数
              member.awaitingJoinCallback = null
            }
          }
          // awaitingJoinCallback的变化,可能导致delayedJoin满足条件
          joinPurgatory.checkAndComplete(GroupKey(group.groupId))

        case Stable | AwaitingSync => // 类似PreparingRebalance
          for (member <- group.allMemberMetadata) {
            if (member.awaitingSyncCallback != null) {
              member.awaitingSyncCallback(Array.empty[Byte], Errors.NOT_COORDINATOR_FOR_GROUP.code)
              member.awaitingSyncCallback = null
            }
            heartbeatPurgatory.checkAndComplete(MemberKey(member.groupId, member.memberId))
          }
      }
    }
  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值