- 幾乎沒有服務不需要配置:命令行參數 or 配置文件;
- 配置項多了, 設置起來太麻煩;配置項少, 不夠靈活;
Kafka的配置
- Kafka的配置相當豐富,寫成本手冊一點問題都沒有, 官網配置說明;
- 與Kafka Server相關的配置分類:
Zookeeper
General
Authorizer
Socket Server
Log
Replication
Controlled shutdown
Offset management
Quota
Kafka Metrics
SSL
Sasl
Kafka配置設置實現
- 所在文件: core/src/main/scala/kafka/server/KafkaConfig.scala;
- object Defaults: 定義了所有的配置項默認值;
- object KafkaConfig: 定義了所有的配置項名稱:
PrincipalBuilderClassProp = SslConfigs.PRINCIPAL_BUILDER_CLASS_CONFIG
...
說明文檔:
/* Documentation */
/** ********* Zookeeper Configuration ***********/
val ZkConnectDoc = "Zookeeper host string"
...
創建了configDef, 是一個ConfigDef類對象:
private val configDef = {
import ConfigDef.Importance._
import ConfigDef.Range._
import ConfigDef.Type._
import ConfigDef.ValidString._
new ConfigDef().define(...).define(...)...
作為Class KafkaConfig的伴生類,定義了創建KafkaConfig對象的工廠方法:
def apply(props: java.util.Map[_, _]): KafkaConfig = new KafkaConfig(props, true)
通用Config類:AbstractConfig
- 所在文件: clients/src/main/java/org/apache/kafka/common/config/AbstractConfig.java
- 源碼中注釋:
A convenient base class for configurations to extend.
This class holds both the original configuration that was provided as well as the parsed
- 構造函數:
public AbstractConfig(ConfigDef definition, Map<?, ?> originals, Boolean doLog)
originals表示所有被用戶設置了的參數;
definition表示所有的配置項,包默認值;
通過調用definition.parse(this.originals)
得到使用用戶設置參數更新后的所有配置項和值;
- 提供一系列的get方法,返回相應配置的值:
getInt
getShort
getLong
getDouble
getList
getBoolean
getString
getPassword
getClass
通用config構建類:ConfigDef
- 所在文件: clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java
- define: 加入某一配置項,包括其name, type, defaultValue, importance, documentation等;
- parse(Map<?, ?> props): 使用props來更新一組配置項;