這里主要是從不同使用場景來調優,僅供參考。
吞吐量優先
吞吐量優先使用場景如采集日志。
1.?broker配置調優
num.partitions:分區個數,設置為與消費者的線程數基本相等
2.?producer配置調優
?
batch.size
批量提交消息的字節數,發送消息累計大小達到該值時才會發送(或者達到linger.ms),默認16k,如果 batch 設置太小,會導致頻繁網絡請求,吞吐量下降;如果 batch 太大,會導致一條消息需要等待很久才能被發送出去,增加網絡延時;建議設置為1M。
linger.ms
發送間隔時間,默認是 0,意思就是消息必須立即被發送。如果 linger.ms 設置的太小,會導致頻繁網絡請求,吞吐量下降;如果 linger.ms 太長,會導致一條消息需要等待很久才能被發送出去,增加網絡延時;建議設置為100ms以上。
compression.type
壓縮類型,默認是 none,不壓縮,但是也可以使用 lz4 壓縮,效率還是不錯的,壓縮之后可以減小數據量,提升吞吐量,但是會加大 producer 端的 CPU 開銷。
acks
應答機制,默認是all(0.8.x之前,默認為1),即等待所有的副本收到消息后再返回成功,可以設置成1,即leader副本確認接收到消息后,生產者會收到返回成功的信息。但如果恰好此時leader失效,該條消息就會丟失。
buffer.memory
內存緩沖區大小,默認32M,當消息寫入過快或者寫入量過大時,Sender 線程來不及處理,造成緩存區堆積,此時會阻塞用戶線程,禁止往 kafka 寫入消息,一般需要根據業務場景估算一個 buffer_memory 的合理值,建議64M以上。
?3.?consumer配置調優
fetch.min.bytes
從broker獲取消息的最小字節數,只有大于這個值時,consumer才會拉取消息,默認是1,建議設置為1048576(1M)。
fetch.max.wait.ms
當fetch.min.bytes不滿足時,從broker獲取消息的最大等待時間,默認是500,建議設置為1000
低延時優先
?使用場景有實時數據傳輸,比如彈幕
1.?broker配置調優
num.partitions
分區個數,設置為與消費者的線程數基本相等。
num.io.threads
默認是8。負責寫磁盤的線程數。整個參數值要占總核數的50%。
num.replica.fetchers
默認是1。副本拉取線程數,這個參數占總核數的50%的1/3。
num.network.threads
默認是3。數據傳輸線程數,這個參數占總核數的50%的2/3
2.?producer配置調優?????
linger.ms
設置為0,即有消息就發送。
compression.type
設置為nonenone。
acks
設置為0,異步發送,無需等待任何broker確認
3.?consumer配置調優
fetch.min.bytes
設置為1,一有消息就消費。
線程數
消費者的并發線程數能滿足實時消費的要求,避免積壓
可靠性優先
?將kafka作為核心數據源,不允許kafka出現數據丟失情況的業務架構。
1.?broker配置調優
default.replication.factor
至少設置為3,2/3機器掛掉夠,依然不影響數據的可靠性。
min.insync.replicas
當生產者的ack設置為all時,必須滿足該數量的副本同步成功后才能繼續寫入。當default.replication.factor設置為3時,該值建議設置為2。
unclean.leader.election.enable
不潔leader選舉,默認true,建議設置為false,即不允許不在ISR列表中的broker參加leader的選舉,否則會導致已經提交但是還未復制的消息的丟失
2.?producer配置調優
acks
設置為all,等待ISR中的所有副本收到數據后再返回成功。
retries
重試次數,建議>=3
3.?consumer配置調優?
enable.auto.commit: 是否開啟自動提交,默認true,在設置為true時與auto.commit.interval.ms(自動提交時間間隔)配合使用,有點是簡單,省去了偏移量提交邏輯,缺點是會存在重復消費和消息丟失的情況,在數據可靠性優先的場景下需要設置為false,當事務提交后再提交位移。
可用性優先
?將kafka作為核心依賴,不允許kafka出現長時間不可用情況的業務架構(對數據可靠性要求不高,不阻塞讀寫就行)
1.?broker配置調優
unclean.leader.election.enable
設置為true,允許不潔的副本當選leader。
min.insync.replicas
設置為1。
num.recovery.threads.per.data.dir
啟動時用于日志恢復和關閉時用于刷新的每個數據目錄的線程數,默認為1,建議設置為1,減少重啟時加載日志的時間。
2.?producer配置調優
acks :?設置為0,不等待任何確認,直接返回成功。