Kafka Kafka如何實現高吞吐量

2021-10-02 21:59:20 字數 1781 閱讀 8795

kafka的訊息是不斷追加到檔案中的,這個特性使kafka可以充分利用磁碟的順序讀寫效能

順序讀寫不需要硬碟磁頭的尋道時間,只需很少的扇區旋轉時間,所以速度遠快於隨機讀寫

生產者負責寫入資料,kafka會將訊息持久化到磁碟,保證不會丟失資料,kafka採用了倆個技術提高寫入的速度。

1.順序寫入:在大學的計算機組成(劃重點)裡我們學過,硬碟是機械結構,需要指標定址找到儲存資料的位置,所以,如果是隨機io,磁碟會進行頻繁的定址,導致寫入速度下降。kafka使用了順序io提高了磁碟的寫入速度,kafka會將資料順序插入到檔案末尾,消費者端通過控制偏移量來讀取訊息,這樣做會導致資料無法刪除,時間一長,磁碟空間會滿,kafka提供了2種策略來刪除資料:基於時間刪除和基於partition檔案的大小刪除。

在這之前先來了解一下零拷貝(直接讓作業系統的 cache 中的資料傳送到網絡卡後傳輸給下游的消費者):平時從伺服器讀取靜態檔案時,伺服器先將檔案從複製到核心空間,再複製到使用者空間,最後再複製到核心空間並通過網絡卡傳送出去,而零拷貝則是直接從核心到核心再到網絡卡,省去了使用者空間的複製。

kafka把所有的訊息存放到乙個檔案中,當消費者需要資料的時候直接將檔案傳送給消費者,比如10w的訊息共10m,全部傳送給消費者,10m的訊息在內網中傳輸是非常快的,假如需要1s,那麼kafka的tps就是10w。zero copy對應的是linux中sendfile函式,這個函式會接受乙個offsize來確定從**開始讀取。現實中,不可能將整個檔案全部發給消費者,他通過消費者傳遞過來的偏移量來使用零拷貝讀取指定內容的資料返回給消費者。

在linux kernel2.2 之後出現了一種叫做"零拷貝(zero-copy)"系統呼叫機制,就是跳過「使用者緩衝區」的拷貝,建立乙個磁碟空間和記憶體的直接對映,資料不再複製到「使用者態緩衝區」,系統上下文切換減少為2次,可以提公升一倍的效能。

kafka中的topic中的內容可以被分為多分partition存在,每個partition又分為多個段segment,所以每次操作都是針對一小部分做操作,很輕便,並且增加並行操作的能力

kafka允許進行批量傳送訊息,producter傳送訊息的時候,可以將訊息快取在本地,等到了固定條件傳送到kafka

等訊息條數到固定條數

一段時間傳送一次

producer壓縮之後,在consumer需進行解壓,雖然增加了cpu的工作,但在對大資料處理上,瓶頸在網路上而不是cpu,所以這個成本很值得

批量傳送資料壓縮一起使用,單條做資料壓縮的話,效果不明顯

kafka的設計目標是高吞吐量,它比其它訊息系統快的原因體現在以下幾方面:

1、kafka操作的是序列檔案i / o(序列檔案的特徵是按順序寫,按順序讀),為保證順序,kafka強制點對點的按順序傳遞訊息,這意味著,乙個consumer在訊息流(或分割槽)中只有乙個位置。

2、kafka不儲存訊息的狀態,即訊息是否被「消費」。一般的訊息系統需要儲存訊息的狀態,並且還需要以隨機訪問的形式更新訊息的狀態。而kafka 的做法是儲存consumer在topic分割槽中的位置offset,在offset之前的訊息是已被「消費」的,在offset之後則為未「消費」的,並且offset是可以任意移動的,這樣就消除了大部分的隨機io。

3、kafka支援點對點的批量訊息傳遞。

4、kafka的訊息儲存在os pagecache(頁快取,page cache的大小為一頁,通常為4k,在linux讀寫檔案時,它用於快取檔案的邏輯內容,從而加快對磁碟上映像和資料的訪問)。

Kafka Kafka延遲佇列如何實現

什麼是延遲佇列?延遲佇列儲存的是對應的延遲訊息,所謂 延遲訊息 是指當訊息被傳送以後,並不想讓消費者立刻拿到訊息,而是等待特定時間後,消費者才能拿到這個訊息進行消費。基於訊息的延遲 指為每條訊息設定不同的延遲時間,那麼每當佇列中有新訊息進入的時候就會重新根據延遲時間排序,當然這也會對效能造成極大的影...

如何實現寬高自適應

我們在進行網頁布局時經常要定義元素的寬和高。但很多時候我們希望元素的大小能夠根據視窗或子元素自動調整,實現這一過程就是寬高自適應。元素自適應在網頁布局中非常重要,它能夠使網頁顯示更靈活,可以適應在不同裝置 不同視窗和不同解析度下顯示。當塊狀元素不寫寬度的時候,預設的寬度是100 即相對于父元素的寬度...

如何快速實現高併發短文檢索

一 需求緣起 某併發量很大,資料量適中的業務線需要實現乙個 標題檢索 的功能 1 併發量較大,每秒20w次 2 資料量適中,大概200w資料 3 是否需要分詞 是 4 資料是否實時更新 否 二 常見潛在解決方案及優劣 1 資料庫搜尋法 具體方法 將標題資料存放在資料庫中,使用like來檢索 優點 方...