SocketServer
说明,socketserver主要用于处理kafka server对外提交网络请求的操作,用于检查连接数,把请求添加到请求的队列中,对KafkaApis提供操作支持.
实例创建与启动
socketServer = new SocketServer(config, metrics, kafkaMetricsTime)
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(totalProcessorThreads, maxQueuedRequests)
实例启动:
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
得到配置项broke

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

被折叠的 条评论
为什么被折叠?



