kafka源码分析之kafka启动-SocketServer

本文详细分析了Kafka 0.9.0版本中SocketServer的启动过程,包括实例创建、接收网络请求的配置,如监听器、网络线程、请求队列大小、连接数限制等。SocketServer负责处理服务器对外的网络请求,创建了用于网络请求的管道,并根据配置启动Acceptor线程和Processor线程,以处理来自客户端的连接和请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SocketServer

说明,socketserver主要用于处理kafka server对外提交网络请求的操作,用于检查连接数,把请求添加到请求的队列中,KafkaApis提供操作支持.

实例创建与启动

socketServer = new SocketServer(configmetricskafkaMetricsTime)
socketServer.startup()

 

实例初始化生成:

得到listeners配置的值,默认是PLAINTEXT://:port,前面部分是协议,

 可配置为PLAINTEXT,SSL,SASL_PLAINTEXT,SASL_SSL.

private val endpoints = config.listeners

得到num.network.threads配置的处理网络请求的线程个数配置,默认是3.
private val numProcessorThreads = config.numNetworkThreads

得到queued.max.requests配置的请求队列的最大个数,默认500.
private val maxQueuedRequests = config.queuedMaxRequests

这里生成总的处理线程的个数,用于网络请求,根据listener的个数与网络线程个数的乘积.默认只有一个listener.
private val totalProcessorThreads numProcessorThreads endpoints.size
得到max.connections.per.ip配置的单机IP的最大连接个数的配置,默认不限制.
private val maxConnectionsPerIp = config.maxConnectionsPerIp

得到max.connections.per.ip.overrides配置的针对某个特别的IP的连接个数限制的重新设置值.

多个IP配置间使用逗号分开,如:host1:500,host2:600
private val maxConnectionsPerIpOverrides = config.maxConnectionsPerIpOverrides

this.logIdent "[Socket Server on Broker " + config.brokerId "], "

生成用于网络请求的管道,管道的处理线程数就是配置的线程数*listeners的个数,请求队列的大小就是配置的队列大小.
val 
requestChannel new RequestChannel(totalProcessorThreadsmaxQueuedRequests)

 

实例启动:

def startup() {
  this.synchronized {
这里根据每个ip对应的连接数限制,生成一个用于对连接数进行记数的quotas实例.
    connectionQuotas new ConnectionQuotas(maxConnectionsPerIp

       maxConnectionsPerIpOverrides)


读取如下配置项,用于生成socket中SO_SNDBUF,SO_RCVBUF等的buffer的大小.

读取socket.send.buffer.bytes配置项,默认值100kb,这个用于SOCKET发送数据的缓冲区大小.

读取socket.receive.buffer.bytes配置项默认值100kb,这个用于SOCKET的接收数据的缓冲区大小.

读取socket.request.max.bytes配置的值,这个用于设置每次请求的数据大小.默认值,100MB.

读取connections.max.idle.ms配置的值,默认为10分钟,用于设置每个连接最大的空闲回收时间.
    val sendBufferSize = config.socketSendBufferBytes
    
val recvBufferSize = config.socketReceiveBufferBytes
    
val maxRequestSize = config.socketRequestMaxBytes
    
val connectionsMaxIdleMs = config.connectionsMaxIdleMs

得到配置项broker.id的值.
    
val brokerId = config.brokerId

这里根据每一个endpoint(也就是配置的listener的协议与端口),生成处理的网络线程Processor与Acceptor实例.并启动endpoint对应的Acceptor实例.在生成Acceptor的实例时,会同时启动此实例中对应的线程处理实例数组Processor.
    
var 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值