Kafka架構探險(三)——Kafka參數詳解

Kafka提供很多的參數:broker參數、topic參數、producer參數、consumer參數等,方便我們對kafka的性能做調整,本博文就來歸納總結下常見的參數

參數的說明是基於Kafka 2.12-2.3.0版本

詳細可以參考官網

broker參數

broker端的參數在Kafka目錄下的config/server.properties文件中

參數名稱 備註說明
broker.id kafka的唯一標誌,全局唯一,默認是-1,如果不指定,則自動生成,也是全局唯一
log.dirs 指定了kafka持久化消息的目錄;可以是多個值,以逗號隔開;設置多個目錄,可以提高系統的吞吐量
zookeeper.connect kafka依賴的zookeeper的ip和port;可以是zookeeper集羣,以逗號隔開
listeners broker監聽器,主要用於client連接broker使用,格式:協議://ip:port,協議://ip:port,協議包括:PLAINTEXT/SSL/SASL_SSL等,如果不指定,則默認所有的client都能連接broker
advertised.listeners 和listeners類似,主要用於laas環境下,在多網卡的環境中,可以設置該參數值提供給外網的client訪問
log.retention.{hours/minutes/ms} 控制消息數據留存的時間,同時設置優先ms,默認留存時間是7d
log.retention.bytes 控制消息日誌保存的大小,超過該值的大小,則kafka會自動清理該分區的過期日誌端文件,默認值是1073741824,值爲-1時,表示不會根據消息的大小來刪除消息日誌
num.network.threads 控制broker端在後臺用於處理網絡請求的線程數,默認是3
num.io.threads 控制broker端處理磁盤IO的線程數,默認是8
message.max.bytes kafka接收最大消息的大小,默認是977kb
log.segment.bytes topic的分區是以一堆segment文件存儲的,這個控制每個segment的大小,會被topic創建時的指定參數覆蓋
log.retention.check.interval.ms 週期性檢查是否有日誌符合刪除的條件,默認值是300s
num.recovery.threads.per.data.dir kafka broker啓動的過程中會加載此節點上所有topic的log文件,如果數據量非常大會導致加載時間過長,通過修改該值可以加快加載的速度,默認值是1
unclean.leader.election.enable 是否允許非ISR中的副本被選舉爲leader,如果設置爲true的話,broker端可能因日誌截斷而造成消息丟失
replication.factor 設置主題的副本數,一般使用default.replication.factor

topic參數

如果將broker參數看作是全局參數設置,那麼topic參數就是局部參數設置,參數名稱和broker中的參數名稱是一致的,不過在topic中設置了,會覆蓋broker中的參數設置,常見的有以下幾種:

參數名稱 備註說明
message.max.bytes 覆蓋全局的 message.max.bytes,即爲每個topic指定不同的最大消息的大小
retention.bytes 覆蓋全局的log.retention.bytes 每個topic設置不同的消息留存大小

producer參數

消息生產者發送消息到kafka指定的topic中,所以producer端的參數大多跟topic和消息有關

參數名稱 備註說明
key.serializer 消息序列化,可以指定系統已經提供的序列化方式,也可以自定義序列化方式 ,自定義需要實現org.apache.kafka.common.serialization.Serializer接口,參數值是序列化處理器的全路徑名
value.serializer 跟key.serializer一樣
acks 控制producer生產消息的持久性,值範圍有0、1、all
buffer.memory 指定producer端用於緩存消息的緩衝區大小,單位是字節,默認是32MB
compression.type 消息壓縮的類型,默認是none,值範圍:GZIP、Snappy、LZ4
retries 消息重試的次數
batch.size producer端批量發送消息的批大小
request.timeout.ms broker響應producer端的超時時間大小,默認是30s
max.block.ms 內存緩衝區在填滿時,producer處於阻塞狀態,並停止接收新的消息而不是拋出異常
max.in.flight.requests.per.connection 限制了producer在單個broker鏈接上能否發送的未響應請求的數量,如果設置成1,則可以保證消息的順序性

consumer參數

參數名稱 備註說明
group.id 指定consumer group 的名字
key.deserializer 爲消息的key反序列化,也可以自定義,需要實現org.apache.kafka.common.serialization.Deserializer接口
value.deserializer 爲消息體反序列化,跟key.deserializer類似
session.timeout.ms consumer group檢測組內成員發送崩潰的時間(coordinator檢測失敗的時間)
max.poll.interval.ms consumer處理邏輯最大的時間
auto.offset.reset 指定了無位移或位移移界(即consumer要消費的消息的位移不在當前消息日誌的合理區間範圍)時kafka的應對策略,有三個值:earliest、latest、none
enable.auto.commit 指定consumer是否自動提交位移
fetch.max.bytes 指定consumer端單次獲取數據的最大字節數,若消息的內容很大,則該值應該調更大點,否則這個消息無法被消費,默認是52428800
max.poll.records 控制單次poll調用返回的最大消息數,默認是500條
heartbeat.interval.ms coordinator要開啓新一輪的rebalance時,該參數控制consumer group的成員何時得知新的rebalance,該值必須要小於session.timeout.ms
connections.max.idle.ms Kafka定義關閉空閒Socket的時間間隔,默認是9分鐘
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章