首先来看一下Kafka和KafkaConfig相关类图,类图是在idea里面使用PlantUml(依赖Graphviz)插件画的。




wiondows kafka启动 启动kafka服务_类图

Kafka和KafkaConfig相关类图



Logging

日志类,提供所有级别的日志输出方法,kafka里面有打印日志的类都继承该类

Kafka

Kafka主函数main所在的类,静态函数getPropsFromArgs检查命令行参数,读取指定的server.properties配置文件,返回Properties对象。创建KafkaServerStartable对象,往JVM中增加一个关闭的钩子,然后调用KafkaServerStartable.startup方法启动程序,最后调用KafkaServerStartable.awaitShutdown阻塞进程等待程序关闭。

KafkaServerStartable

KafkaServer启动类,提供静态函数fromProps,根据server.properties配置文件的内容,创建Seq[KafkaMetricsReporter]对象reporters 和 KafkaConfig对象,然后用这两个对象作为参数创建KafkaServerStartable对象。KafkaServerStartable创建了一个KafkaServer对象server,函数startup和shutdown直接调用server的启动和关闭函数。

KafkaServer

表示单个Kafka Borker的生命周期,处理启动和关闭单个Kafka节点所需的所有功能。startup方法中,初始化并加载所有组件,后续会单独开一篇进行讲解。

KafkaConfig

Kafka的配置类,定义了Kafka配置参数,目前总共有190个参数,默认情况下server.properties指定了18个 参数值,剩余的参数在该类中都指定了默认值。单例对象object KafkaConfig中创建了ConfigDef对象的实例,并调用define函数对配置参数做了设置,其中一些以Doc为后缀的变量,对各自对应的配置参数做了说明。




wiondows kafka启动 启动kafka服务_组件启动顺序_02


ConfigDef

此类用于指定一组预期的配置,对于每个配置,可以指定名称、类型、默认值、文档、组信息、组中的顺序。通过重写Validator,可以提供用于单个配置验证的特殊验证逻辑。此外,还可以指定配置的依赖项。配置的有效值和可见性可根据其他配置的值进行更改。可以重写Recommender以获得有效值并设置给定当前配置值的配置的可见性。提供了一系列define函数对配置项进行设置。

DynamicBrokerConfig

Broker的一些可动态配置的参数,存储在zk中,可以用两种级别进行定义:

  • per-broker: 每个broker都可以动态更新
  • cluster-wide: 可以作为集群范围内的动态更新

borker配置的优先顺序是:

  • DYNAMIC_BROKER_CONFIG: 存储ZK 的 /config/brokers/{brokerId}
  • DYNAMIC_DEFAULT_BROKER_CONFIG: 存储ZK 的 /config/brokers/
  • STATIC_BROKER_CONFIG: broker启动时使用的属性,通常来自server.properties文件
  • DEFAULT_CONFIG: 默认配置定义在 KafkaConfig类中