kafka 6 kafka快速讀取解析

2021-10-23 16:46:52 字數 1580 閱讀 7032

總結補充:關於零拷貝記憶體中有幾分buffer

kafka作為訊息中介軟體,雖然是基於磁碟做資料儲存。但是有高效能、高吞吐、低延遲等特點。

磁碟順序讀寫效能高於記憶體的隨機讀寫

kafka將訊息記錄持久化到磁碟,有新訊息時,通過不斷追加的方式將message追加到檔案磁碟末尾

kafka利用了作業系統本身的 page cache,即利用的是作業系統自身的記憶體而不是jvm空間記憶體,這樣做主要有以下兩點好處

零拷貝只減少不必要的拷貝次數。通常是減少io讀寫過程中的拷貝次數。

零拷貝主要減少兩部分的開銷

比如:讀取檔案,再用socket傳送出去

傳統方式實現:

先讀取、再傳送,實際經過1~4四次copy。

buffer = file.read

socket.send(buffer)

實際上並不需要傳統io方式的第二個和第三個資料副本。應用程式除了快取資料並將其傳輸回套接字緩衝區之外什麼都不做。相反,資料可以直接從讀緩衝區傳輸到套接字緩衝區。

顯然,第二次和第三次資料copy 其實在這種場景下沒有什麼幫助反而帶來開銷,這也正是零拷貝出現的意義。

這種場景:是指讀取磁碟檔案後,不需要做其他處理,直接用網路傳送出去。試想,如果讀取磁碟的資料需要用程式進一步處理的話,必須要經過第二次和第三次資料copy,讓應用程式在記憶體緩衝區處理。

此時我們會發現使用者態「空空如也」。資料沒有來到使用者態,而是直接在核心態就進行了傳輸,但這樣依然還是有多次複製。首先資料被讀取到read buffer中,然後發到socket buffer,最後才發到網絡卡。雖然減少了使用者態和核心態的切換,但依然存在多次資料複製。

如果可以進一步減少資料複製的次數,甚至沒有資料複製是不是就會做到最快呢?

dmadma,全稱叫direct memory access,一種可讓某些硬體子系統去直接訪問系統主記憶體,而不用依賴cpu的計算機系統的功能。聽著是不是很厲害,跳過cpu,直接訪問主記憶體。傳統的記憶體訪問都需要通過cpu的排程來完成。如下圖:

dma,則可以繞過cpu,硬體自己去直接訪問系統主記憶體。如下圖

kafka採用

分割槽分段設計

索引方面的優化

批量讀寫資料

從而使kafka有了高效能、高吞吐、低延時的特點

快速讀取SharedPreferences資料

在開發時時常要用到sharedpreferences存入和讀取一些資料,如果activity很多的話,每次都定義一次sharedpreferences非常麻煩。其實可以很簡單地將sharedpreferences的讀寫抽出來形成乙個工具類,方便呼叫 public class sharedprefer...

kafka搭建 快速搭建Kafka服務

搞流處理的話,無論如何是繞不過kafka的了,還好kafka是乙個概念比較好理解的架構模型。我覺得官方的這三張圖已經很好地把模型結構給闡述清楚了。發布 訂閱模型 實現訊息寫入與訊息讀取解耦。kafka相當於是乙個訊息緩衝池 2.日誌檔案順序結構 kafka的高吞吐量就是依賴順序寫入 當然還包括了一些...

python快速讀取excel

python處理excel資料也是經常需要用到的。本文介紹2種python讀取excel的方法 openpyxl和pandas。事實上,pandas讀取excel比openpyxl更方便,有需要的直接往後拉,看第二種。import openpyxl excel name t1.xlsx wb ope...