Kafka服务端NIO操作原理解析(二)

Kafka系列文章

基于Kafka2.1解读Producer原理
基于Kafka2.1解读Consumer原理
Kafka服务端NIO操作原理解析(一)



前言

废话不多说,继续上一篇文章,我们继续基于Kafka3.7解读服务端的nio原理


Kafka服务端IO类关系图

一、基本认知

可以看到Acceptor和Processor都是线程,所以实际Kafka服务端在启动(执行startup)方法之后,会基于一个Acceptor多个Processor的模式启动,并把这多个线程执行起来。

二、Acceptor的主体流程

acceptor的类图示意图
对于Acceptor来说,主要就是通过selector监听accept事件,然后选择一个processor来进行后续操作

2.1 run方法源码

  /**
   * Accept loop that checks for new connection attempts
   */
  override def run(): Unit = {
   
   
    serverChannel.register(nioSelector, SelectionKey.OP_ACCEPT)
    try {
   
   
      while (shouldRun.get()) {
   
   
        try {
   
   
          acceptNewConnections()
          closeThrottledConnections()
        }
        catch {
   
   
          // We catch all the throwables to prevent the acceptor thread from exiting on exceptions due
          // to a select operation on a specific channel or a bad request. We don't want
          // the broker to stop responding to requests from other clients in these scenarios.
          case e: ControlThrowable => throw e
          case e: Throwable => error("Error occurred", e)
        }
      }
    } finally {
   
   
      debug("Closing server socket, selector, and any throttled sockets.")
      CoreUtils.swallow(serverChannel.close(), this, Level.ERROR)
      CoreUtils.swallow(nioSelector.close
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值