Kafka中的RPC:Server端代码流程简单概述

kafka版本:

kafka RPC Server端代码入口:kafka.network.SocketServer

流程概述:kafka自己实现了reactor模型,用于IO处理

kafka中,一个Acceptor对应一个不同的端口Endpoint
一个Acceptor中有一组Processor,数量为num.network.threads
Acceptor:
通过NIO方式获取ServerSocketChannel,并进行服务端口bind;
注册OP_ACCEPT,读取SocketChannel放入到Processor的队列kafka.network.Processor#newConnections
Processor:
处理队列kafka.network.Processor#newConnections中的SocketChannel
$localHost:$localPort-$remoteHost:$remotePort-$index
并基于SelectionKey包装出一个KafkaChannel,在注册OP_ACCEPT时,作为attachment,方便后面读取请求数据;
通过selector,获取有数据的SelectionKey,同时获取作为attachment的KafkaChannel,通过org.apache.kafka.common.network.NetworkReceive读取数据
读取请求数据时,先读取长度,再读数据,防止粘包拆包;封装为NetworkReceive,放入到org.apache.kafka.common.network.Selector#stagedReceives
然后把stagedReceives中的请求数据,转移到org.apache.kafka.common.network.Selector#completedReceives
然后处理completedReceives:org.apache.kafka.common.requests.RequestHeader#parse反序列化数据,获取RequestHeader,然后将数据封装为kafka.network.RequestChannel.Request#Request
放入kafka.network.RequestChannel#requestQueue
kafka.server.KafkaRequestHandler线程会消费requestQueue数据,调用kafka.server.KafkaApis#handle进行业务处理:根据请求数据头中apiKey进行模式匹配处理,把响应数据放入kafka.network.RequestChannel#responseQueues
然后处理responseQueues队列中的响应数据,需要发送的,就在对应channel上上注册OP_WRITE;
下一轮org.apache.kafka.common.network.Selector#poll的时候就可以处理OP_WRITE,把待发送的数据Send,通过SocketChannel进行发送,
发送完成后,放入到org.apache.kafka.common.network.Selector#completedSends队列
kafka.network.Processor#processCompletedSends:处理完成的数据:

相关推荐

  1. KafkaRPC:Server代码流程简单概述

    2024-06-13 23:36:03       10 阅读
  2. kafka简单使用

    2024-06-13 23:36:03       10 阅读
  3. 深度学习域泛化简要概述

    2024-06-13 23:36:03       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-13 23:36:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-13 23:36:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-13 23:36:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-13 23:36:03       20 阅读

热门阅读

  1. React 事件函数传播及捕获

    2024-06-13 23:36:03       7 阅读
  2. devops自动化运维平台的核心原则有哪些?

    2024-06-13 23:36:03       10 阅读
  3. C++学习步骤

    2024-06-13 23:36:03       8 阅读
  4. hadoop-cos

    2024-06-13 23:36:03       7 阅读
  5. 软件测试--第十一章 设计和维护测试用例

    2024-06-13 23:36:03       10 阅读