鎖屏面試題百日百刷,每個作業日堅持更新面試題,****請看到最后就能獲取你想要的, 接下來的是今日的面試題:
1.為什么kafka可以實作高吞吐?單節點kafka的吞吐量也比其他訊息佇列大,為什么?
Kafka是分布式訊息系統,需要處理海量的訊息,Kafka的設計是把所有的訊息都寫入速度低容量大的硬碟,以此來換取更強的存盤能力,但實際上,使用硬碟并沒有帶來過多的性能損失,kafka主要使用了以下幾個方式實作了超高的吞吐率
順序讀寫
kafka的訊息是不斷追加到檔案中的,這個特性使kafka可以充分利用磁盤的順序讀寫性能順序讀寫不需要硬碟磁頭的尋道時間,只需很少的扇區旋轉時間,所以速度遠快于隨機讀寫
零拷貝
先簡單了解下檔案系統的操作流程,例如一個程式要把檔案內容發送到網路,這個程式是作業在用戶空間,檔案和網路socket屬于硬體資源,兩者之間有一個內核空間在作業系統內部,整個程序為:
在Linux kernel2.2 之后出現了一種叫做”零拷貝(zero-copy)”系統呼叫機制,就是跳過“用戶緩沖區”的拷貝,建立一個磁盤空間和記憶體的直接映射,資料不再復制到“用戶態緩沖區”系統背景關系切換減少為2次,可以提升一倍的性能
檔案分段
kafka的佇列topic被分為了多個區partition,每個partition又分為多個段segment,所以一個佇列中的訊息實際上是保存在N多個片段檔案中通過分段的方式,每次檔案操作都是對一個小檔案的操作,非常輕便,同時也增加了并行處理能力
批量發送
Kafka允許進行批量發送訊息,先將訊息快取在記憶體中,然后一次請求批量發送出去比如可以指定快取的訊息達到某個量的時候就發出去,或者快取了固定的時間后就發送出去如100條訊息就發送,或者每5秒發送一次這種策略將大大減少服務端的I/O次數
資料壓縮
Kafka還支持對訊息集合進行壓縮,Producer可以通過GZIP或Snappy格式對訊息集合進行壓縮壓縮的好處就是減少傳輸的資料量,減輕對網路傳輸的壓力Producer壓縮之后,在Consumer需進行解壓,雖然增加了CPU的作業,但在對大資料處理上,瓶頸在網路上而不是CPU,所以這個成本很值得
2.Kafka的ISR
ISR代表In-Sync Replicas,在Kafka里表示目前處于同步狀態的那些副本(replica),
Kafka規定一條訊息只有當ISR中所有的副本都復制成功時,才能被消費,
全部內容在git上,了解更多請點我頭像或到我的主頁去獲得,謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/550395.html
標籤:其他
