IMG_9993
前言
我在 Kafka 貢獻將近一年了,但一直沒有機會參與性能優化相關的議題。然而,對於像 Kafka 這樣的高流量軟體來說,哪怕只是小幅度的優化,當流量上升時,影響都會非常顯著,而且社群對這類問題也格外關注。這次難得有機會參與記憶體優化,因此記錄下這次優化的過程。
這次改善的主要目標是,「用更少的記憶體達到一樣的吞吐量」,經過估算可以減少 HeapByteBuffer 這個物件記憶體 99.6% 的使用量,且經過觀察 byte[] 可以減少大約 34% 的記憶體使用量,而這次修改程式碼的路徑,自 2016 年功能完成後便未曾更動。當修改這類長期未變動且屬於讀取熱路徑的程式碼時,社群會特別關注測試是否涵蓋所有情境,以確保修正不會引入問題。因此,完整的測試覆蓋對這次變更至關重要。
Jira: KAFKA-19898
Github PR: KAFKA-18989 Optimize FileRecord#searchForOffsetWithSize