Kafka性能調優

  Kafka的配置詳盡、複雜,想要進行全面的性能調優需要掌握大量信息,這裏只記錄一下我在日常工作使用中走過的坑和經驗來對kafka集羣進行優化常用的幾點。

1.JVM的優化

  java相關係統自然離不開JVM的優化。首先想到的肯定是Heap Size的調整。

vim bin/kafka-server-start.sh     
調整KAFKA_HEAP_OPTS="-Xmx16G -Xms16G”的值

推薦配置:一般HEAP SIZE的大小不超過主機內存的50%。

2.網絡和ios操作線程配置優化:

# broker處理消息的最大線程數
num.network.threads=9
# broker處理磁盤IO的線程數
num.io.threads=16

推薦配置:

num.network.threads主要處理網絡io,讀寫緩衝區數據,基本沒有io等待,配置線程數量爲cpu核數加1。

num.io.threads主要進行磁盤io操作,高峯期可能有些io等待,因此配置需要大些。配置線程數量爲cpu核數2倍,最大不超過3倍。

3.socket server可接受數據大小(防止OOM異常):

socket.request.max.bytes=2147483600

推薦配置:

根據自己業務數據包的大小適當調大。這裏取值是int類型的,而受限於java int類型的取值範圍又不能太大:

java int的取值範圍爲(-2147483648~2147483647),佔用4個字節(-231次方到231次方-1,不能超出,超出之後報錯:org.apache.kafka.common.config.ConfigException: Invalid value 8589934592 for configuration socket.request.max.bytes: Not a number of type INT。

4.log數據文件刷盤策略

# 每當producer寫入10000條消息時,刷數據到磁盤
log.flush.interval.messages=10000
# 每間隔1秒鐘時間,刷數據到磁盤
log.flush.interval.ms=1000

推薦配置:

爲了大幅度提高producer寫入吞吐量,需要定期批量寫文件。一般無需改動,如果topic的數據量較小可以考慮減少log.flush.interval.ms和log.flush.interval.messages來強制刷寫數據,減少可能由於緩存數據未寫盤帶來的不一致。推薦配置分別message 10000,間隔1s。

5.日誌保留策略配置

# 日誌保留時長
log.retention.hours=72
# 段文件配置
log.segment.bytes=1073741824

推薦配置:

日誌建議保留三天,也可以更短;段文件配置1GB,有利於快速回收磁盤空間,重啓kafka加載也會加快(kafka啓動時是單線程掃描目錄(log.dir)下所有數據文件)。如果文件過小,則文件數量比較多。

6.replica複製配置

num.replica.fetchers=3
replica.fetch.min.bytes=1
replica.fetch.max.bytes=5242880

推薦配置:

  每個follow從leader拉取消息進行同步數據,follow同步性能由這幾個參數決定,分別爲:

拉取線程數(num.replica.fetchers):fetcher配置多可以提高follower的I/O併發度,單位時間內leader持有更多請求,相應負載會增大,需要根據機器硬件資源做權衡,建議適當調大;

最小字節數(replica.fetch.min.bytes):一般無需更改,默認值即可;

最大字節數(replica.fetch.max.bytes):默認爲1MB,這個值太小,推薦5M,根據業務情況調整

最大等待時間(replica.fetch.wait.max.ms):follow拉取頻率,頻率過高,leader會積壓大量無效請求情況,無法進行數據同步,導致cpu飆升。配置時謹慎使用,建議默認值,無需配置。

7.分區數量配置

num.partitions=5

推薦配置:

默認partition數量1,如果topic在創建時沒有指定partition數量,默認使用此值。Partition的數量選取也會直接影響到Kafka集羣的吞吐性能,配置過小會影響消費性能,建議改爲5。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章