Kafka提供很多的參數(shù):broker參數(shù)、topic參數(shù)、producer參數(shù)、consumer參數(shù)等脉顿,方便我們對(duì)kafka的性能做調(diào)整,本博文就來(lái)歸納總結(jié)下常見(jiàn)的參數(shù)
參數(shù)的說(shuō)明是基于Kafka 2.12-2.3.0版本
詳細(xì)可以參考官網(wǎng)
broker參數(shù)
broker端的參數(shù)在Kafka目錄下的config/server.properties
文件中
參數(shù)名稱 | 備注說(shuō)明 |
---|---|
broker.id | kafka的唯一標(biāo)志点寥,全局唯一艾疟,默認(rèn)是-1,如果不指定,則自動(dòng)生成蔽莱,也是全局唯一 |
log.dirs | 指定了kafka持久化消息的目錄弟疆;可以是多個(gè)值,以逗號(hào)隔開(kāi)盗冷;設(shè)置多個(gè)目錄怠苔,可以提高系統(tǒng)的吞吐量 |
zookeeper.connect | kafka依賴的zookeeper的ip和port;可以是zookeeper集群仪糖,以逗號(hào)隔開(kāi) |
listeners | broker監(jiān)聽(tīng)器柑司,主要用于client連接broker使用,格式:協(xié)議://ip:port,協(xié)議://ip:port,協(xié)議包括:PLAINTEXT/SSL/SASL_SSL等锅劝,如果不指定攒驰,則默認(rèn)所有的client都能連接broker |
advertised.listeners | 和listeners類似,主要用于laas環(huán)境下故爵,在多網(wǎng)卡的環(huán)境中玻粪,可以設(shè)置該參數(shù)值提供給外網(wǎng)的client訪問(wèn) |
log.retention.{hours/minutes/ms} | 控制消息數(shù)據(jù)留存的時(shí)間,同時(shí)設(shè)置優(yōu)先ms,默認(rèn)留存時(shí)間是7d |
log.retention.bytes | 控制消息日志保存的大小诬垂,超過(guò)該值的大小劲室,則kafka會(huì)自動(dòng)清理該分區(qū)的過(guò)期日志端文件,默認(rèn)值是1073741824结窘,值為-1時(shí)很洋,表示不會(huì)根據(jù)消息的大小來(lái)刪除消息日志 |
num.network.threads | 控制broker端在后臺(tái)用于處理網(wǎng)絡(luò)請(qǐng)求的線程數(shù),默認(rèn)是3 |
num.io.threads | 控制broker端處理磁盤(pán)IO的線程數(shù)晦鞋,默認(rèn)是8 |
message.max.bytes | kafka接收最大消息的大小蹲缠,默認(rèn)是977kb |
log.segment.bytes | topic的分區(qū)是以一堆segment文件存儲(chǔ)的棺克,這個(gè)控制每個(gè)segment的大小悠垛,會(huì)被topic創(chuàng)建時(shí)的指定參數(shù)覆蓋 |
log.retention.check.interval.ms | 周期性檢查是否有日志符合刪除的條件,默認(rèn)值是300s |
num.recovery.threads.per.data.dir | kafka broker啟動(dòng)的過(guò)程中會(huì)加載此節(jié)點(diǎn)上所有topic的log文件,如果數(shù)據(jù)量非常大會(huì)導(dǎo)致加載時(shí)間過(guò)長(zhǎng),通過(guò)修改該值可以加快加載的速度娜谊,默認(rèn)值是1 |
unclean.leader.election.enable | 是否允許非ISR中的副本被選舉為leader确买,如果設(shè)置為true的話,broker端可能因日志截?cái)喽斐上G失 |
replication.factor | 設(shè)置主題的副本數(shù)纱皆,一般使用default.replication.factor |
topic參數(shù)
如果將broker參數(shù)看作是全局參數(shù)設(shè)置湾趾,那么topic參數(shù)就是局部參數(shù)設(shè)置,參數(shù)名稱和broker中的參數(shù)名稱是一致的派草,不過(guò)在topic中設(shè)置了搀缠,會(huì)覆蓋broker中的參數(shù)設(shè)置,常見(jiàn)的有以下幾種:
參數(shù)名稱 | 備注說(shuō)明 |
---|---|
message.max.bytes | 覆蓋全局的 message.max.bytes近迁,即為每個(gè)topic指定不同的最大消息的大小 |
retention.bytes | 覆蓋全局的log.retention.bytes 每個(gè)topic設(shè)置不同的消息留存大小 |
producer參數(shù)
消息生產(chǎn)者發(fā)送消息到kafka指定的topic中,所以producer端的參數(shù)大多跟topic和消息有關(guān)
參數(shù)名稱 | 備注說(shuō)明 |
---|---|
key.serializer | 消息序列化艺普,可以指定系統(tǒng)已經(jīng)提供的序列化方式,也可以自定義序列化方式 ,自定義需要實(shí)現(xiàn)org.apache.kafka.common.serialization.Serializer接口歧譬,參數(shù)值是序列化處理器的全路徑名 |
value.serializer | 跟key.serializer一樣 |
acks | 控制producer生產(chǎn)消息的持久性岸浑,值范圍有0、1瑰步、all |
buffer.memory | 指定producer端用于緩存消息的緩沖區(qū)大小矢洲,單位是字節(jié),默認(rèn)是32MB |
compression.type | 消息壓縮的類型,默認(rèn)是none,值范圍:GZIP缩焦、Snappy读虏、LZ4 |
retries | 消息重試的次數(shù) |
batch.size | producer端批量發(fā)送消息的批大小 |
request.timeout.ms | broker響應(yīng)producer端的超時(shí)時(shí)間大小,默認(rèn)是30s |
max.block.ms | 內(nèi)存緩沖區(qū)在填滿時(shí),producer處于阻塞狀態(tài)袁滥,并停止接收新的消息而不是拋出異常 |
max.in.flight.requests.per.connection | 限制了producer在單個(gè)broker鏈接上能否發(fā)送的未響應(yīng)請(qǐng)求的數(shù)量掘譬,如果設(shè)置成1,則可以保證消息的順序性 |
consumer參數(shù)
參數(shù)名稱 | 備注說(shuō)明 |
---|---|
group.id | 指定consumer group 的名字 |
key.deserializer | 為消息的key反序列化呻拌,也可以自定義葱轩,需要實(shí)現(xiàn)org.apache.kafka.common.serialization.Deserializer接口 |
value.deserializer | 為消息體反序列化,跟key.deserializer類似 |
session.timeout.ms | consumer group檢測(cè)組內(nèi)成員發(fā)送崩潰的時(shí)間(coordinator檢測(cè)失敗的時(shí)間) |
max.poll.interval.ms | consumer處理邏輯最大的時(shí)間 |
auto.offset.reset | 指定了無(wú)位移或位移移界(即consumer要消費(fèi)的消息的位移不在當(dāng)前消息日志的合理區(qū)間范圍)時(shí)kafka的應(yīng)對(duì)策略藐握,有三個(gè)值:earliest靴拱、latest、none |
enable.auto.commit | 指定consumer是否自動(dòng)提交位移 |
fetch.max.bytes | 指定consumer端單次獲取數(shù)據(jù)的最大字節(jié)數(shù)猾普,若消息的內(nèi)容很大袜炕,則該值應(yīng)該調(diào)更大點(diǎn),否則這個(gè)消息無(wú)法被消費(fèi),默認(rèn)是52428800 |
max.poll.records | 控制單次poll調(diào)用返回的最大消息數(shù)初家,默認(rèn)是500條 |
heartbeat.interval.ms | coordinator要開(kāi)啟新一輪的rebalance時(shí)偎窘,該參數(shù)控制consumer group的成員何時(shí)得知新的rebalance,該值必須要小于session.timeout.ms |
connections.max.idle.ms | Kafka定義關(guān)閉空閑Socket的時(shí)間間隔溜在,默認(rèn)是9分鐘 |