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分鐘 |