KAFKA的启动
Kafka启动时,通过进入kafka的bin路径下,执行如下脚本:
./kafka-server-start.sh ../config/server.properties
这个脚本会启动Kafka类的实例,并执行main函数,传入的参数是server.properties的路径.
def main(args: Array[String]): Unit = {
try {
加载对应的server.properties配置文件,并生成Properties实例.
val serverProps = getPropsFromArgs(args)
这里生成一个KafkaServer的实例,这个实例生成时,会在实例中同时生成一个KafkaServer的实例,
生成KafkaServer实例前,需要先通过serverProps生成出一个KafkaConfig的实例.
val kafkaServerStartable = KafkaServerStartable.fromProps(serverProps)
添加对kill操作的勾子函数.用于处理,如果直接kill时关闭kafkaserver.
// attach shutdown handler to catch control-c
Runtime.getRuntime().addShutdownHook(new Thread() {
override def run() = {
kafkaServerStartable.shutdown
}
})
启动并等待server停止.
kafkaServerStartable.startup
kafkaServerStartable.awaitShutdown
}
catch {
case e: Throwable =>
fatal(e)
System.exit(1)
}
System.exit(0)
}
根据properties生成server实例
在KafkaServerStartable.fromProps(serverProps)函数调用时,也就是kakfa启动时,
new KafkaServerStartable(KafkaConfig.fromProps(serverProps))
KafkaServerStartable实例生成时,会生成KafkaServer实例:
class KafkaServerStartable(val serverConfig: KafkaConfig) extends Logging {
private val server = new