kafka 1 高效持久化日誌和加快資料傳輸

2021-10-12 07:10:32 字數 1366 閱讀 3823

順序讀寫,磁碟會預讀,預讀即在讀取的起始位址連續讀取多個頁面,主要時間花費在了傳輸時間。

記憶體對映。完成對映之後你對物理記憶體的操作會被同步到硬碟上(作業系統在適當的時候)。通過 mmap,程序像讀寫硬碟一樣讀寫記憶體(當然是虛擬機器記憶體),也不必關心記憶體的大。省去了使用者空間到核心空間複製的開銷。

但也有乙個很明顯的缺陷——不可靠,寫到 mmap 中的資料並沒有被真正的寫到硬碟,作業系統會在程式主動呼叫 flush 的時候才把資料真正的寫到硬碟。

kafka 提供了乙個引數 producer.type 來控制是不是主動 flush:

如果 kafka 寫入到 mmap 之後就立即 flush,然後再返回 producer 叫同步 (sync)。

如果 kafka 寫入 mmap 之後立即返回 producer 不呼叫 flush 叫非同步 (async)。

零拷貝。傳統 read/write 方式進行網路檔案傳輸的方式,我們可以看到,在這個過程當中,檔案資料實際上是經過了四次 copy 操作:

硬碟—>核心 buf—>使用者 buf—>socket 相關緩衝區—>協議引擎。

sendfile系統呼叫則提供了一種減少以上多次copy,提公升檔案傳輸效能的方法, sendfile的引入不僅減少了資料複製,還減少了上下文切換。

相較傳統 read/write 方式,2.1 版本核心引進的 sendfile 已經減少了核心緩衝區到 user 緩衝區,再由 user 緩衝區到 socket 相關緩衝區的檔案 copy。

而在核心版本 2.4 之後,檔案描述符結果被改變,sendfile 實現了更簡單的方式,再次減少了一次 copy 操作。

在 apache、nginx、lighttpd 等 web 伺服器當中,都有一項 sendfile 相關的配置,使用 sendfile 可以大幅提公升檔案傳輸效能。

kafka 把所有的訊息都存放在乙個乙個的檔案中,當消費者需要資料的時候 kafka 直接把檔案傳送給消費者,配合 mmap 作為檔案讀寫方式,直接把它傳給 sendfile

併發讀寫,加快讀寫速度;多分割槽的儲存,利於資料的均衡;

在kafka檔案儲存中,同乙個topic下有多個不同partition,每個partition為乙個目錄,partiton命名規則為topic名稱+有序序號,partiton序號從0開始,序號最大值為partitions數量減1。

broker–>topic–>partition–>segment file

segment file:分為index索引檔案和log資料檔案,分別以後綴".index"和「.log」結尾。

檔案中存放的是二進位製流資訊。

根據offset如何快速定位到讀取的資訊:

索引檔案和資料檔案的檔名:00000000…9999.index 存放,可通過二分法查詢到檔案

1

資料佇列 kafka 1

kafka對訊息儲存時根據topic進行歸類,傳送訊息者稱為productor,訊息接受者稱為consumer,kafka集群有多個kafka例項 每個例項 server 稱為broker.kafka依賴於zookeeper集群 儲存資訊,系統的可用性 zookeeper所在結點要開網路監控 為什麼...

Kafka學習 四 Kafka持久化

概述 kafka很大程度上依賴檔案系統來儲存和快取訊息。有一普遍的認識 磁碟很慢。這讓人們懷疑使用磁碟作為持久化的效能。實際上,磁碟是快還是慢完全取決於我們是如何使用它。就目前來說,乙個 six 7200rpm sata raid 5磁碟線性 順序 寫入的效能能達到600mb sec,而任意位置寫 ...

7 持久化 AOF日誌

1 rdb儲存的弊端和解決思路 解決思路 2 aof概念 aof的主要作用是解決了資料持久化的實時性,目前已經是redis持久化的主流方式 3 aof寫資料過程 4 aof寫資料三種策略 no 系統控制 5 aof功能開啟 寫資料策略配置 6 aof相關配置 dir 7 aof重寫 aof重寫作用 ...