kafka訊息檢索原理

2021-10-19 09:35:39 字數 1279 閱讀 4007

讀取資料的過程中,資料是屬於某乙個topic的某乙個partition對應的某乙個segment檔案中的某一條記錄。如何高效找到這條訊息,決定著kafka的效能。

kafka中資料檔案的儲存目錄,我們可以看到的是這個partition下面有好多組檔案,每一組都由乙個segment資料檔案,乙個index索引檔案,以及乙個timeindex時間戳索引檔案構成。

segment就是儲存資料的檔案,index索引檔案每一條訊息相對偏移量,也就是一條msg在segment檔案中的偏移量,而我們說的每一條訊息的偏移量是指這一條訊息在這乙個分割槽中若干segment中的唯一的標識。

index檔案的序號就是message在日誌檔案中的相對偏移量

offsetindex是稀疏索引,也就是說不會儲存所有的訊息的相對offset和position

訊息檢索的過程,以這個partition目錄下面,00000000001560140916為例:

定位offset為1560140921的message

①定位到具體的segment日誌檔案

由於log日誌檔案的檔名是這個檔案中第一條訊息的offset-1。

因此可以根據offset定位到這個訊息所在日誌檔案:00000000001560140916.log

②計算查詢的offset在日誌檔案的相對偏移量

segment檔案中第一條訊息的offset = 1560140917

計算message相對偏移量:

需要定位的offset - segment檔案中第一條訊息的offset + 1 = 1560140921 - 1560140917 + 1 = 5

查詢index索引檔案, 可以定位到該訊息在日誌檔案中的偏移位元組為456。

綜上,直接讀取資料夾00000000001560140916.log中偏移456位元組的資料即可。

1560140922 -1560140917 +1 = 6 如果查詢的offset在日誌檔案的相對偏移量在index索引檔案不存在,

可根據其在index索引檔案最接近的上限偏移量,往下順序查詢。

訊息佇列實現原理(以kafka為例)

訊息佇列中介軟體是分布式系統中重要的元件,主要解決應用耦合,非同步訊息,流量削鋒等問題。實現高效能 高可用 可伸縮和最終一致性架構。使用較多的訊息佇列有kafka activemq rabbitmq zeromq metamq rocketmq。訊息佇列在實際應用中常用的使用場景 非同步處理,應用解...

訊息佇列 訊息佇列 kafka

kafka是乙個分布式的基於發布 訂閱模式的訊息佇列,主要用於大資料實時處理領域。要理解kafka首先要有分布式的概念,要有訊息佇列的概念。分布式系統最大的優勢就是解耦和削峰,這種情況下,a系統生成了乙個訊息,b系統非同步獲取,那麼就需要乙個存放訊息的訊息佇列 mq 相比較傳統的訊息佇列,訊息被消費...

Kafka訊息模型

一 訊息傳遞模型 傳統的訊息佇列最少提供兩種訊息模型,一種p2p,一種pub sub,而kafka並沒有這麼做,巧妙的,它提供了乙個消費者組的概念,乙個訊息可以被多個消費者組消費,但是只能被乙個消費者組裡的乙個消費者消費,這樣當只有乙個消費者組時就等同與p2p模型,當存在多個消費者組時就是pub s...