Kafka最核心的思想是使用磁盤,而不是使用內存,可能所有人都會認為,內存的速度一定比磁盤快,我也不例外。在看了Kafka的設計思想,查閱了相應資料再加上自己的測試后,發現磁盤的順序讀寫速度和內存持平。
而且Linux對於磁盤的讀寫優化也比較多,包括read-ahead和write-behind,磁盤緩存等。如果在內存做這些操作的時候,一個是Java對象的內存開銷很大,另一個是隨着堆內存數據的增多,JAVA的GC時間會變得很長,使用磁盤操作有以下幾個好處:
- 磁盤緩存由Linux系統維護,減少了程序員的不少工作。
- 磁盤順序讀寫速度超過內存隨機讀寫。
- JVM的GC效率低,內存占用大。使用磁盤可以避免這一問題。
- 系統冷啟動后,磁盤緩存依然可用。