GroupCoordinator负责对接上层KafkaApis的各种handle请求,对下封装了GroupMetadataManager的各个方法
重点分析rebalance的两个阶段JoinRequest和SyncRequest
一.JoinRequest
1.最上层由KafkaApis的handleJoinGroupRequest方法发起
case ApiKeys.JOIN_GROUP => handleJoinGroupRequest(request)
def handleJoinGroupRequest(request: RequestChannel.Request): Unit = {
val joinGroupRequest = request.body[JoinGroupRequest]
// 封装返回结果
def sendResponseCallback(joinResult: JoinGroupResult): Unit = {
def createResponse(requestThrottleMs: Int): AbstractResponse = {
val protocolName = if (request.context.apiVersion() >= 7)
joinResult.protocolName.orNull
else
joinResult.protocolName.getOrElse(GroupCoordinator.NoProtocol)
val responseBody = new JoinGroupResponse(
new JoinGroupResponseData()
.setThrottleTimeMs(requestThrottleMs)
.setErrorCode(joinResult.error.code)
.setGenerationId(joinResult.generationId)
.setProtocolType(joinResult.protocolType.orNull)
.setProtocolName(protocolName)
.setLeader(joinResult.leaderId)
.setMemberId(joinResult.memberId)
.setMembers(joinResult.members.asJava)
)
trace("Sending join group response %s for correlation id %d to client %s."
.format(responseBody, request.header.correlationId, request.header.clientId))
response

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



