一般的 mq 每個訊息都有乙個狀態,這樣每個訊息狀態改變都要更新,增加了很多隨機讀寫。kafka 對每個 partition 只有乙個指標,而不是儲存每個訊息的狀態,所有在指標後面的訊息都是被消費過的訊息。這就去掉了很多「確認訊息」動作的隨機讀寫,通過一次移動指標,來確認多個訊息。
很多訊息中介軟體,不這麼做是因為實現起來有些困難。它需要在 consumer 之間進行協調,為每個 partition 選擇 consumer。kafka 依賴 zookeeper 來管理這些工作。
kafka 支援批量訊息處理。電腦擅長處理「線性的」掃瞄和傳輸,不擅長處理「小的」、「隨機」訊息。所以,把「小的」訊息合併成批量處理,可能會有一點延遲,但吞吐量會上去。
kafka 重試依靠 os pagecache 中儲存的資料。說 kafka 會立刻把資料寫到磁碟上,但其實不是這樣的。它會寫到 kernel 記憶體池,記憶體池會非同步地寫到磁碟上。
傳統 mq 的一些缺點。傳統 broker 會共享「消費狀態」在 client 和 server 之間,這造成了架構更加複雜。雖然這些 mq 也實現了批處理訊息功能,但 broker 會把訊息儲存到從記憶體,直到 client 去 ack 這些訊息。 ack 是需要乙個「很短」的 network round trip,但很多這種「很短」的 nrt 會消費很多時間。
kafka 不會儲存 consumer 狀態,因此它是無狀態的。當有資料消費完,就會更新 zk 上的 offset 不會告訴 broker 什麼。
參考:
- kafka writes every message to broker disk. still, performance wise it is better than some of the in-memory message storing message queues. why is that?
- kafka 為什麼比其它的訊息系統快?:上面英文資料的中文翻譯,但有的地方翻譯不全。
kafka為什麼那個快?
kafka是乙個高吞吐速度的訊息中介軟體,可以部署在廉價的主機上。速度快的原因有兩個 磁碟讀寫的快慢取決於你怎麼使用它,寫入的時候可以選擇順序寫入和隨機寫入,kafka選擇的時順序寫入機制,該機制的讀寫速度和記憶體的速度基本持平 使用順序寫入的好處 1.磁碟順序寫入的速度比記憶體隨機速度快 2.在記...
Kafka為什麼速度快
磁碟讀寫的快慢取決於你怎麼使用它,也就是順序讀寫或者隨機讀寫。在順序讀寫的情況下,磁碟的順序讀寫速度和記憶體持平。如果不刪除硬碟肯定會被撐滿,所以kakfa提供了兩種策略來刪除日誌 log.cleanup.policy配置 1 基於時間 檢查當前日誌檔案中是否有保留時間超過設定的閾值來尋找可刪除的日...
為什麼kafka的速度那麼快?
我們都知道,kafka是依賴於檔案系統來儲存和緩衝訊息的。在其他訊息佇列rabbitmq中,使用的是記憶體作為預設的儲存介質,而磁碟作為備選介質,以此來實現高吞吐和低延遲的效果 redis則是完全依賴於記憶體實現的。那為什麼kafka採用這種持久化的形式還能提供如此有競爭力的效能呢?首先kafka在...