kafka源码解析之三Broker的启动
来源:互联网 发布:网络情感诈骗的方法 编辑:程序博客网 时间:2024/05/19 22:57
正常启动kafka的命令如下:
查看kafka-server-start.sh脚本:
查看Kafka.Kafka类:
object Kafka extends Logging { def main(args: Array[String]): Unit = { if (args.length != 1) { println("USAGE: java [options] %s server.properties".format(classOf[KafkaServer].getSimpleName())) System.exit(1) } try { val props = Utils.loadProps(args(0)) val serverConfig = new KafkaConfig(props)//组装配置信息 KafkaMetricsReporter.startReporters(serverConfig.props) val kafkaServerStartable = new KafkaServerStartable(serverConfig) // attach shutdown handler to catch control-c Runtime.getRuntime().addShutdownHook(new Thread() { override def run() = { kafkaServerStartable.shutdown//注册shutdown时候的钩子函数 } }) kafkaServerStartable.startup//启动kafkaServerStartable kafkaServerStartable.awaitShutdown//正常情况下broker一直在这里wait } catch { case e: Throwable => fatal(e) } System.exit(0) }}
其中上面的kafkaServerStartable封装了KafkaServer,最终执行startup的是KafkaServer。
class KafkaServerStartable(val serverConfig: KafkaConfig) extends Logging { private val server = new KafkaServer(serverConfig) def startup() { try { server.startup() AppInfo.registerInfo() } catch { case e: Throwable => fatal("Fatal error during KafkaServerStartable startup. Prepare to shutdown", e) // KafkaServer already calls shutdown() internally, so this is purely for logging & the exit code System.exit(1) } }}查看KafkaServer:class KafkaServer(val config: KafkaConfig, time: Time = SystemTime) extends Logging with KafkaMetricsGroup { this.logIdent = "[Kafka Server " + config.brokerId + "], " private var isShuttingDown = new AtomicBoolean(false) private var shutdownLatch = new CountDownLatch(1) private var startupComplete = new AtomicBoolean(false) val brokerState: BrokerState = new BrokerState val correlationId: AtomicInteger = new AtomicInteger(0) var socketServer: SocketServer = null var requestHandlerPool: KafkaRequestHandlerPool = null var logManager: LogManager = null var offsetManager: OffsetManager = null var kafkaHealthcheck: KafkaHealthcheck = null var topicConfigManager: TopicConfigManager = null var replicaManager: ReplicaManager = null var apis: KafkaApis = null var kafkaController: KafkaController = null val kafkaScheduler = new KafkaScheduler(config.backgroundThreads) var zkClient: ZkClient = null newGauge( "BrokerState", new Gauge[Int] { def value = brokerState.currentState } ) /** * Start up API for bringing up a single instance of the Kafka server. * Instantiates the LogManager, the SocketServer and the request handlers - KafkaRequestHandlers */ def startup() { try { info("starting") brokerState.newState(Starting) isShuttingDown = new AtomicBoolean(false) shutdownLatch = new CountDownLatch(1) /* start scheduler */ kafkaScheduler.startup() /* setup zookeeper */ zkClient = initZk() /* start log manager */ logManager = createLogManager(zkClient, brokerState) logManager.startup() socketServer = new SocketServer(config.brokerId, config.hostName, config.port, config.numNetworkThreads, config.queuedMaxRequests, config.socketSendBufferBytes, config.socketReceiveBufferBytes, config.socketRequestMaxBytes, config.maxConnectionsPerIp, config.connectionsMaxIdleMs, config.maxConnectionsPerIpOverrides) socketServer.startup() //1.作为备:fetch 消息,跟上leader 2.作为主:刷新ISR replicaManager = new ReplicaManager(config, time, zkClient, kafkaScheduler, logManager, isShuttingDown) /* start offset manager */ //1.保存offsetsCache = new Pool[GroupTopicPartition, OffsetAndMetadata] //2.删除过期的offsetsCache offsetManager = createOffsetManager() kafkaController = new KafkaController(config, zkClient, brokerState) /* start processing requests */ apis = new KafkaApis(socketServer.requestChannel, replicaManager, offsetManager, zkClient, config.brokerId, config, kafkaController) requestHandlerPool = new KafkaRequestHandlerPool(config.brokerId, socketServer.requestChannel, apis, config.numIoThreads) brokerState.newState(RunningAsBroker) Mx4jLoader.maybeLoad() replicaManager.startup() kafkaController.startup() //处理topic的config改变通知 topicConfigManager = new TopicConfigManager(zkClient, logManager) topicConfigManager.startup() /* tell everyone we are alive */ //在/broker/id节点建立kafka的broker信息 kafkaHealthcheck = new KafkaHealthcheck(config.brokerId, config.advertisedHostName, config.advertisedPort, config.zkSessionTimeoutMs, zkClient) kafkaHealthcheck.startup() registerStats() startupComplete.set(true) info("started") } catch { case e: Throwable => fatal("Fatal error during KafkaServer startup. Prepare to shutdown", e) shutdown() throw e } }}执行完之后,Broker上的KafkaServer正式启动。
0 0
- kafka源码解析之三Broker的启动
- kafka源码解析之四Broker的模块组成
- 04-Kafka Broker启动脚本及对应源码解析
- kafka系列之broker重点配置解析(三)
- kafka源码解析之五Broker处理的request的来源
- ActiveMQ之三:启动ActiveMQ的Broker
- RocketMQ源码深度解析三之Broker篇
- 我学Kafka源码之Broker Server
- Kafka源码系列之Broker的IO服务及业务处理
- RocketMQ原理解析-broker 1. broker的启动
- RocketMQ原理解析-broker 1. broker的启动
- RocketMQ原理解析-broker 1. broker的启动
- RocketMQ原理解析-broker 1. broker的启动
- kafka源码之kafkaserver的启动
- kafka源码之kafkaserver的启动
- 跟我学Kafka源码之Broker Server
- Kafka教程(三)---------------底层实现细节之broker
- kafka源码解析之二kafka内部的专业术语
- struts 下载地址
- 我的Exchange 2010 启用匿名了。我怎么防止别人任意伪造一个邮件地址发送给我内部的人呢?
- 人生的一种境界:享受第四种感情
- jQuery源码解析(2)—— Callback、Deferred异步编程
- Maven入门
- kafka源码解析之三Broker的启动
- 梳理caffe代码math_functions(一)
- 加油宝贝!
- struts2的整理
- hdu 3413
- 而立之年!!!
- 第4周项目3 小学生算数能力测试系统
- Java中的重载和重写
- 职责链模式