private void handleJoinGroupRequest(ChannelHandlerContext ctx, Request request) { JoinGroupRequest joinGroupRequest = (JoinGroupRequest) request.getBody(); ResponseHeader responseHeader = new ResponseHeader(request.getHeader().correlationId()); List<ProtocolEntry> protocols = joinGroupRequest.groupProtocols().stream().map(protocol -> new ProtocolEntry(protocol.name(), Utils.toArray(protocol.metadata()))).collect(Collectors.toList()); coordinator.handleJoinGroup( joinGroupRequest.groupId(), joinGroupRequest.memberId(), request.getHeader().clientId(), request.getClientAddress().toString(), joinGroupRequest.rebalanceTimeout(), joinGroupRequest.sessionTimeout(), joinGroupRequest.protocolType(), protocols, (joinResult) -> { Map<String, ByteBuffer> members = joinResult.getMembers().entrySet().stream().collect(Collectors.toMap(k -> k.getKey(), k -> ByteBuffer.wrap(k.getValue()))); JoinGroupResponse responseBody = new JoinGroupResponse(request.getHeader().apiVersion(), joinResult.getErrorCode(), joinResult.getGenerationId(), joinResult.getSubProtocol(), joinResult.getMemberId(), joinResult.getLeaderId(), members); logger.trace(String.format("Sending join group response %s for correlation id %d to client %s.", responseBody, request.getHeader().correlationId(), request.getHeader().clientId())); sendResponse(ctx, new Response(responseHeader, responseBody)); } ); }