一、broker參數
broker.id:kafka集群的唯一標識。
log.dirs:kafka存儲消息日志的目錄,多個用逗號隔開,需要保證指定的目錄有充足的磁盤空間。
zookeeper.connect:必須配置,指定kafka集群注冊的zookeeper集群的地址。格式是:[主機名]:端口,多個使用逗號隔開。當多個kafka集群注冊到同一個zookeeper集群時,必須在末尾指定chroot(即當前kafka集群注冊到zookeeper的根目錄),用於
將每個kafka集群隔離開,如:localhost:2181,localhost:2182/kafka_cluster1,此處的/kafka_cluster1就表示chroot。
listeners:該參數用於客戶端連接broker端。格式:[協議]://[主機名]:[端口],多個使用逗號隔開。如果不指定主機名,則綁定默認網卡,若主機名是:0.0.0.0,則綁定多有網卡。kafka當前支持的協議包括:PLAINTEXT、SSL和SASL_SSL。對於未啟用安全的
kafka集群,使用PLAINTEXT就可以了。否者使用SSL或者SASL_SSL。
advertised.listeners:和listeners類似,也是用於發布給clients的,不過該參數主要用於IaaS環境。對於有多塊網卡的環境(公網網卡和私網網卡),可以指定該參數綁定公網IP,供外部clients使用,使用listeners綁定私網IP,公內部clients使用。
unclean.leader.election.enable:是否開啟unclean leader選舉,默認是false。表示如果ISR變空,而此時leader有宕機了,kafka不允許從剩下存活的非ISR副本中選擇一個當leader,因為如果允許,雖然kafka可以繼續為clients提供服務,但會造成數據丟失。
delete.topic.enable:是否允許刪除topic及管理的所有數據,新版本默認允許。這是一個異步刪除。
log.retention.{hours|minutes|ms}:該參數主要用於設置kafka消息持久化的時間,若同時設置,優先級是ms>minutes>hours,默認是保存7天。
log.retention.bytes:該參數主要控制kafka集群需要為每個消息日志保存多大的數據。對於大小超過了這個設置,kafka會自動清理過期的日志段文件。默認是1G。
min.insync.replicas:該參數主要配合producer的acks使用。當acks=-1,表示producer端尋求最高等級的持久化保證,而min.insync.replicas也只有在acks=-1時才有意義,它指定了broker端必須成功響應clients端消息發送的最少分片數才算成功。舉個栗子:
加上某個topic的每個分片數為3,當min.insync.replicas=2,則表示我們容一台kafka機器宕機。
num.network.threads:控制一個broker在后台用於處理網絡請求的線程數,默認3。這里的“處理”只是負責轉發請求,他會將接收到的請求轉發到后面的處理線程中。在正式環境中,用戶需要不停的監控NetworkProcessorAvgIdlePercent JMX指標,若該指標
持續低於0.3,則需要調大該參數。
num.io.threads:這個參數是控制broker端實際處理網絡請求的線程數,默認8,。kafka默認創建8個線程以輪詢的方式不停的監聽轉發過來的網絡請求並進行處理。kafka同樣也為請求處理提供了一個JMX監控指標RequestHandlerAvgIdlePercent ,當指標低於0.3時,
則需要調大該參數。
message.max.bytes:kafka能夠接受的最大消息大小,默認是977KB,用戶可以根據需要進行設置。
二、topic參數
delete.retention.ms:每個topic可以設置自己的留存時間,以覆蓋broker設置的全局留存時間。
max.message.bytes:覆蓋全局的message.max.bytes。
retention.bytes:覆蓋全局的log.retention.bytes。
FAQ
2018-05-02 14:49:18.916 WARN 11916 --- [ntainer#0-3-C-1] org.apache.kafka.clients.NetworkClient : [Consumer clientId=consumer-4, groupId=cwenao-group] Connection to node 0 could not be established. Broker may not be available.
0.10.x broker配置棄用了advertised.host.name和 advertised.port這兩個個配置項,就配置advertised.listeners就可以了。