kafka源码解析之六SocketServer

本文将探讨Kafka的SocketServer实现,重点关注Acceptor线程如何处理网络连接请求,并将其分配给Processor线程进行后续操作,揭示Kafka内部处理请求的机制。
摘要由CSDN通过智能技术生成
class SocketServer(val brokerId: Int,
                   val host: String,
                   val port: Int,
                   val numProcessorThreads: Int,
                   val maxQueuedRequests: Int,
                   val sendBufferSize: Int,
                   val recvBufferSize: Int,
                   val maxRequestSize: Int = Int.MaxValue,
                   val maxConnectionsPerIp: Int = Int.MaxValue,
                   val connectionsMaxIdleMs: Long,
                   val maxConnectionsPerIpOverrides: Map[String, Int] ) extends Logging with KafkaMetricsGroup {
this.logIdent = "[Socket Server on Broker " + brokerId + "], "
private val time = SystemTime
private val processors = new Array[Processor](numProcessorThreads)
@volatile private var acceptor: Acceptor = null
val requestChannel = new RequestChannel(numProcessorThreads, maxQueuedRequests)//
/* a meter to track the average free capacity of the network processors */
private val aggregateIdleMeter = newMeter("NetworkProcessorAvgIdlePercent", "percent", TimeUnit.NANOSECONDS)
/**
 * Start the socket server
 */
def startup() {
  val quotas = new ConnectionQuotas(maxConnectionsPerIp, maxConnectionsPerIpOverrides)
  for(i <- 0 until numProcessorThreads) {//启动num.network.threads个Processor线程处理网络请求
    processors(i) = new Processor(i, 
                                  time, 
                                  maxRequestSize, 
                                  aggregateIdleMeter,
                                  newMeter("IdlePercent", "percent", TimeUnit.NANOSECONDS, Map("networkProcessor" -> i.toString)),
                                  numProcessorThreads, 
                                  requestChannel,
                                  quotas,
                                  connectionsMaxIdleMs)
    Utils.newThread("kafka-network-thread-%d-%d".format(port, i), processors(i), false).start()
  }

  newGauge("ResponsesBeingSent", new Gauge[Int] {
    def value = processors.foldLeft(0) { (total, p) => total + p.countInterestOps(SelectionKey.OP_WRITE) }
  })
  // register the processor threads 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值