首先来看一下Kafka和KafkaConfig相关类图,类图是在idea里面使用PlantUml(依赖Graphviz)插件画的。
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为后缀的变量,对各自对应的配置参数做了说明。
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类中