公司日志系統(tǒng)的Kafka集群多年來一直使用0.8.2版本进倍,當(dāng)前Kafka已經(jīng)發(fā)展到1.x, 2.x,有必要升級(jí)到較高的版本,以使用更新的功能。
本次計(jì)劃升級(jí)至比較穩(wěn)定的1.1.0版本谍婉。
升級(jí)步驟
參考官方文檔:https://kafka.apache.org/documentation/#upgrade_1_1_0
- 每臺(tái)服務(wù)器部署Kafka 1.1.0程序
- 修改配置文件,加上
inter.broker.protocol.version=0.8.2
log.message.format.version=0.8.2
- 逐臺(tái)關(guān)閉0.8.2,啟動(dòng)1.1.0
- 全部升級(jí)后措译,修改配置文件求豫,去掉:
inter.broker.protocol.version=0.8.2
- 逐臺(tái)重啟
- 檢查分區(qū)及主分區(qū)的分布是否均勻最疆,進(jìn)行調(diào)整
Client端因?yàn)榉植继珡V暫時(shí)沒有升級(jí)計(jì)劃努酸,因此broker的log.message.format.version=0.8.2
配置需要一直保留心褐,避免broker做格式轉(zhuǎn)換。
升級(jí)效果
1. 可以做到zero downtime平滑升級(jí)昼伴。
2. 升級(jí)的side effect:數(shù)據(jù)存儲(chǔ)量和消費(fèi)占用帶寬都明顯減少女蜈!
從上圖可以看出竹伸,在生產(chǎn)數(shù)據(jù)相當(dāng)?shù)那闆r下吧享,在broker升級(jí)前1GB的log文件保存了12分鐘的數(shù)據(jù)譬嚣。而在升級(jí)后钢颂,1GB的log文件保存了接近32分鐘的數(shù)據(jù)。對(duì)這個(gè)partition而言拜银,存儲(chǔ)效率是升級(jí)前的2.7倍殊鞭!
不同的partition提升程度并不相同。整體的提升效果盐股,可以從消費(fèi)數(shù)據(jù)量看出钱豁。
單機(jī):
整個(gè)集群:
升級(jí)前后的消費(fèi)數(shù)據(jù)量相差4倍!
之前部分服務(wù)器的監(jiān)控?cái)?shù)據(jù)有日志刷新延遲超過100ms的警告疯汁,升級(jí)后也基本消失牲尺。
可見,升級(jí)Kafka至1.1.0版本對(duì)Kafka集群的磁盤容量幌蚊、磁盤IO及網(wǎng)絡(luò)帶寬資源的占用都有了明顯的減輕谤碳。
分析
由于升級(jí)前后:
- producer沒有升級(jí)
- 網(wǎng)卡流入流量沒有變化
- 每秒消費(fèi)消息數(shù)沒有變化
可以看出存儲(chǔ)效率的提升是在broker產(chǎn)生的。而broker cpu使用率沒有變化溢豆,說明沒有發(fā)生額外的消息格式的轉(zhuǎn)換蜒简。
應(yīng)該是跟官方文檔有提到的下面這個(gè)改動(dòng)有關(guān)(我們使用的是snappy壓縮):