www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]前言 經(jīng)過前 5 篇文章的介紹,估么著小伙伴們已經(jīng)對消息生產(chǎn)和消費的流程應(yīng)該有一個比較清晰的認(rèn)識了。當(dāng)然小伙伴們肯定也比較好奇,Kafka 能夠處理千萬級消息,那它的消息是如何在 Partition 上存儲的呢?今天這篇文章就來為大家揭秘消息是如何存儲的。本文

Kafka:消息是如何在服務(wù)端存儲與讀取的,你真的知道嗎?


前言

經(jīng)過前 5 篇文章的介紹,估么著小伙伴們已經(jīng)對消息生產(chǎn)和消費的流程應(yīng)該有一個比較清晰的認(rèn)識了。當(dāng)然小伙伴們肯定也比較好奇,Kafka 能夠處理千萬級消息,那它的消息是如何在 Partition 上存儲的呢?今天這篇文章就來為大家揭秘消息是如何存儲的。本文主要從消息的邏輯存儲物理存儲兩個角度來介紹其實現(xiàn)原理。

文章概覽

  1. Partition、Replica、Log 和 LogSegment 的關(guān)系。
  2. 寫入消息流程分析。
  3. 消費消息及副本同步流程分析。

Partition、Replica、Log 和 LogSegment 的關(guān)系

假設(shè)有一個 Kafka 集群,Broker 個數(shù)為 3,Topic 個數(shù)為 1,Partition 個數(shù)為 3,Replica 個數(shù)為 2。Partition 的物理分布如下圖所示。

Kafka:消息是如何在服務(wù)端存儲與讀取的,你真的知道嗎?
Partition分布圖

從上圖可以看出,該 Topic 由三個 Partition 構(gòu)成,并且每個 Partition 由主從兩個副本構(gòu)成。每個 Partition 的主從副本分布在不同的 Broker 上,通過這點也可以看出,當(dāng)某個 Broker 宕機時,可以將分布在其他 Broker 上的從副本設(shè)置為主副本,因為只有主副本對外提供讀寫請求,當(dāng)然在最新的 2.x 版本中從副本也可以對外讀請求了。將主從副本分布在不同的 Broker 上從而提高系統(tǒng)的可用性。

Partition 的實際物理存儲是以 Log 文件的形式展示的,而每個 Log 文件又以多個 LogSegment 組成。Kafka 為什么要這么設(shè)計呢?其實原因比較簡單,隨著消息的不斷寫入,Log 文件肯定是越來越大,Kafka 為了方便管理,將一個大文件切割成一個一個的 LogSegment 來進行管理;每個 LogSegment 由數(shù)據(jù)文件和索引文件構(gòu)成,數(shù)據(jù)文件是用來存儲實際的消息內(nèi)容,而索引文件是為了加快消息內(nèi)容的讀取。

可能又有朋友會問,Kafka 本身消費是以 Partition 維度順序消費消息的,磁盤在順序讀的時候效率很高完全沒有必要使用索引啊。其實 Kafka 為了滿足一些特殊業(yè)務(wù)需求,比如要隨機消費 Partition 中的消息,此時可以先通過索引文件快速定位到消息的實際存儲位置,然后進行處理。

總結(jié)一下 Partition、Replica、Log 和 LogSegment 之間的關(guān)系。消息是以 Partition 維度進行管理的,為了提高系統(tǒng)的可用性,每個 Partition 都可以設(shè)置相應(yīng)的 Replica 副本數(shù),一般在創(chuàng)建 Topic 的時候同時指定 Replica 的個數(shù);Partition 和 Replica 的實際物理存儲形式是通過 Log 文件展現(xiàn)的,為了防止消息不斷寫入,導(dǎo)致 Log 文件大小持續(xù)增長,所以將 Log 切割成一個一個的 LogSegment 文件。

注意: 在同一時刻,每個主 Partition 中有且只有一個 LogSegment 被標(biāo)識為可寫入狀態(tài),當(dāng)一個 LogSegment 文件大小超過一定大小后(比如當(dāng)文件大小超過 1G,這個就類似于 HDFS 存儲的數(shù)據(jù)文件,HDFS 中數(shù)據(jù)文件達到 128M 的時候就會被分出一個新的文件來存儲數(shù)據(jù)),就會新創(chuàng)建一個 LogSegment 來繼續(xù)接收新寫入的消息。

寫入消息流程分析

Kafka:消息是如何在服務(wù)端存儲與讀取的,你真的知道嗎?
消息寫入及落盤流程

流程解析

在第 3 篇文章講過,生產(chǎn)者客戶端對于每個 Partition 一次會發(fā)送一批消息到服務(wù)端,服務(wù)端收到一批消息后寫入相應(yīng)的 Partition 上。上圖流程主要分為如下幾步:

  1. 客戶端消息收集器收集屬于同一個分區(qū)的消息,并對每條消息設(shè)置一個偏移量,且每一批消息總是從 0 開始單調(diào)遞增。比如第一次發(fā)送 3 條消息,則對三條消息依次編號 [0,1,2],第二次發(fā)送 4 條消息,則消息依次編號為 [0,1,2,3]。注意此處設(shè)置的消息偏移量是相對偏移量。
  2. 客戶端將消息發(fā)送給服務(wù)端,服務(wù)端拿到下一條消息的絕對偏移量,將傳到服務(wù)端的這批消息的相對偏移量修改成絕對偏移量。
  3. 將修改后的消息以追加的方式追加到當(dāng)前活躍的 LogSegment 后面,然后更新絕對偏移量。
  4. 將消息集寫入到文件通道。
  5. 文件通道將消息集 flush 到磁盤,完成消息的寫入操作。

了解以上過程后,我們在來看看消息的具體構(gòu)成情況。

Kafka:消息是如何在服務(wù)端存儲與讀取的,你真的知道嗎?
消息構(gòu)成細(xì)節(jié)圖

一條消息由如下三部分構(gòu)成:

  • OffSet:偏移量,消息在客戶端發(fā)送前將相對偏移量存儲到該位置,當(dāng)消息存儲到 LogSegment 前,先將其修改為絕對偏移量在寫入磁盤。
  • Size:本條 Message 的內(nèi)容大小
  • Message:消息的具體內(nèi)容,其具體又由 7 部分組成,crc 用于校驗消息,Attribute 代表了屬性,key-length 和 value-length 分別代表 key 和 value 的長度,key 和 value 分別代表了其對應(yīng)的內(nèi)容。

消息偏移量的計算過程

通過以上流程可以看出,每條消息在被實際存儲到磁盤時都會被分配一個絕對偏移量后才能被寫入磁盤。在同一個分區(qū)內(nèi),消息的絕對偏移量都是從 0 開始,且單調(diào)遞增;在不同分區(qū)內(nèi),消息的絕對偏移量是沒有任何關(guān)系的。接下來討論下消息的絕對偏移量的計算規(guī)則。

確定消息偏移量有兩種方式,一種是順序讀取每一條消息來確定,此種方式代價比較大,實際上我們并不想知道消息的內(nèi)容,而只是想知道消息的偏移量;第二種是讀取每條消息的 Size 屬性,然后計算出下一條消息的起始偏移量。比如第一條消息內(nèi)容為 “abc”,寫入磁盤后的偏移量為:8(OffSet)+ 4(Message 大?。? 3(Message 內(nèi)容的長度)= 15。第二條寫入的消息內(nèi)容為“defg”,其起始偏移量為 15,下一條消息的起始偏移量應(yīng)該是:15+8+4+4=31,以此類推。

消費消息及副本同步流程分析

和寫入消息流程不同,讀取消息流程分為兩種情況,分別是消費端消費消息和從副本(備份副本)同步主副本的消息。在開始分析讀取流程之前,需要先明白幾個用到的變量,不然流程分析可能會看的比較糊涂。

  • BaseOffSet:基準(zhǔn)偏移量,每個 Partition 由 N 個 LogSegment 組成,每個 LogSegment 都有基準(zhǔn)偏移量,大概由如下構(gòu)成,數(shù)組中每個數(shù)代表一個 LogSegment 的基準(zhǔn)偏移量:[0,200,400,600, ...]。
  • StartOffSet:起始偏移量,由消費端發(fā)起讀取消息請求時,指定從哪個位置開始消費消息。
  • MaxLength:拉取大小,由消費端發(fā)起讀取消息請求時,指定本次最大拉取消息內(nèi)容的數(shù)據(jù)大小。該參數(shù)可以通過 max.partition.fetch.bytes來指定,默認(rèn)大小為 1M。
  • MaxOffSet:最大偏移量,消費端拉取消息時,最高可拉取消息的位置,即俗稱的“高水位”。該參數(shù)由服務(wù)端指定,其作用是為了防止生產(chǎn)端還未寫入的消息就被消費端進行消費。此參數(shù)對于從副本同步主副本不會用到。
  • MaxPosition:LogSegment 的最大位置,確定了起始偏移量在某個 LogSegment 上開始,讀取 MaxLength 后,不能超過 MaxPosition。MaxPosition 是一個實際的物理位置,而非偏移量。

假設(shè)消費端從 000000621 位置開始消費消息,關(guān)于幾個變量的關(guān)系如下圖所示。

Kafka:消息是如何在服務(wù)端存儲與讀取的,你真的知道嗎?
位置關(guān)系圖

消費端和從副本拉取流程如下:

  1. 客戶端確定拉取的位置,即 StartOffSet 的值,找到主副本對應(yīng)的 LogSegment。
  2. LogSegment 由索引文件和數(shù)據(jù)文件構(gòu)成,由于索引文件是從小到大排列的,首先從索引文件確定一個小于等于 StartOffSet 最近的索引位置。
  3. 根據(jù)索引位置找到對應(yīng)的數(shù)據(jù)文件位置,由于數(shù)據(jù)文件也是從小到大排列的,從找到的數(shù)據(jù)文件位置順序向后遍歷,直到找到和 StartOffSet 相等的位置,即為消費或拉取消息的位置。
  4. 從 StartOffSet 開始向后拉取 MaxLength 大小的數(shù)據(jù),返回給消費端或者從副本進行消費或備份操作。

假設(shè)拉取消息起始位置為 00000313,消息拉取流程圖如下:

Kafka:消息是如何在服務(wù)端存儲與讀取的,你真的知道嗎?
消息拉取流程圖

總結(jié)

本文從邏輯存儲和物理存儲的角度,分析了消息的寫入與消費流程。其中邏輯存儲是以 Partition 來管理一批一批的消息,Partition 映射 Log 對象,Log 對象管理了多個 LogSegment,多個 Partition 構(gòu)成了一個完整的 Topic。消息的實際物理存儲是由一個一個的 LogSegment 構(gòu)成,每個 LogSegment 又由索引文件和數(shù)據(jù)文件構(gòu)成。下篇文章我們來分析一些實際生產(chǎn)環(huán)境中的常用操作及數(shù)據(jù)接入方案,敬請期待。

特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:

Kafka:消息是如何在服務(wù)端存儲與讀取的,你真的知道嗎?

長按訂閱更多精彩▼

Kafka:消息是如何在服務(wù)端存儲與讀取的,你真的知道嗎?

如有收獲,點個在看,誠摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉