Kafka 具有很高的消息吞吐量和低延時(shí)的搜索能力,主要原因是:
- Partition 分區(qū)
Kafka 的 Topic 通過(guò) Partition 進(jìn)行物理分區(qū),每個(gè) Partition 都是一個(gè)有序的消息隊(duì)列。這意味著消息被分散到多個(gè) Partition 中,從而可以大大提高總的消息吞吐量舵稠。 - Journal 接口
Kafka 使用 Journal 接口將消息持久化到文件系統(tǒng),這個(gè)過(guò)程是順序?qū)懭氲?寫入效率非常高。并且每個(gè) Partition 都對(duì)應(yīng)自己的 Journal 文件哺徊。這使得消息的寫入和搜索都可以實(shí)現(xiàn)較高的吞吐量。 - Page Cache
Kafka 利用 Page Cache 將 Journal 文件映射到內(nèi)存,這樣可以避免頻繁的磁盤 IO,大大提高消息的讀取效率落追。這也是 Kafka 搜索延遲很低的原因之一盈滴。 - Index
Kafka 會(huì)為每個(gè) Partition 生成消息的索引文件,加快消息的查找速度轿钠。Index 記錄每個(gè)消息的 offset 與 position 的對(duì)應(yīng)關(guān)系,通過(guò) Index Kafka 可以快速定位指定 offset 的消息在 Journal 文件的位置,從而實(shí)現(xiàn)低延遲的搜索。 - Zero-Copy
Kafka 的消息存儲(chǔ)采用零拷貝機(jī)制,所謂零拷貝是指消息不需要通過(guò)用戶態(tài)和內(nèi)核態(tài)的內(nèi)存 buffers 進(jìn)行拷貝,而是直接在 Journal 文件與 Page Cache 之間共享同一個(gè)內(nèi)存緩沖區(qū)疗垛。這可以減少不必要的內(nèi)存復(fù)制操作,提高消息傳輸?shù)男省?br> 所以,Kafka 的 Partition 分區(qū)、Journal 接口贷腕、Page Cache背镇、Index 和 Zero-Copy 等機(jī)制共同實(shí)現(xiàn)了 Kafka 極高的消息吞吐量以及低延時(shí)的搜索能力。這也使得 Kafka 成為大數(shù)據(jù)處理領(lǐng)域的首選消息中間件之一瞒斩。