精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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

存儲 容災(zāi)備份 Kafka
小伙伴們肯定也比較好奇,Kafka 能夠處理千萬級消息,那它的消息是如何在 Partition 上存儲的呢?今天這篇文章就來為大家揭秘消息是如何存儲的。本文主要從消息的邏輯存儲和物理存儲兩個角度來介紹其實現(xiàn)原理。

前言

小伙伴們肯定也比較好奇,Kafka 能夠處理千萬級消息,那它的消息是如何在 Partition 上存儲的呢?今天這篇文章就來為大家揭秘消息是如何存儲的。本文主要從消息的邏輯存儲和物理存儲兩個角度來介紹其實現(xiàn)原理。

文章概覽

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

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 上,通過這點也可以看出,當某個 Broker 宕機時,可以將分布在其他 Broker 上的從副本設(shè)置為主副本,因為只有主副本對外提供讀寫請求,當然在最新的 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)的,為了防止消息不斷寫入,導致 Log 文件大小持續(xù)增長,所以將 Log 切割成一個一個的 LogSegment 文件。

注意: 在同一時刻,每個主 Partition 中有且只有一個 LogSegment 被標識為可寫入狀態(tài),當一個 LogSegment 文件大小超過一定大小后(比如當文件大小超過 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 上。上圖流程主要分為如下幾步:

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

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

 

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

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

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

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

 

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

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

  • 客戶端確定拉取的位置,即 StartOffSet 的值,找到主副本對應(yīng)的 LogSegment。
  • LogSegment 由索引文件和數(shù)據(jù)文件構(gòu)成,由于索引文件是從小到大排列的,首先從索引文件確定一個小于等于 StartOffSet 最近的索引位置。
  • 根據(jù)索引位置找到對應(yīng)的數(shù)據(jù)文件位置,由于數(shù)據(jù)文件也是從小到大排列的,從找到的數(shù)據(jù)文件位置順序向后遍歷,直到找到和 StartOffSet 相等的位置,即為消費或拉取消息的位置。

從 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)成。

責任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2023-05-30 08:19:07

kafka集群leader

2015-10-23 09:34:16

2024-06-20 08:06:30

2024-09-18 07:00:00

消息隊列中間件消息隊列

2025-01-16 16:41:00

ObjectConditionJDK

2024-10-05 00:00:00

HTTPS性能HTTP/2

2024-03-19 08:01:54

服務(wù)熔斷軟件設(shè)計模式微服務(wù)

2020-01-14 10:37:38

存儲DateTime數(shù)值

2024-12-03 00:38:37

數(shù)據(jù)湖存儲COS

2024-10-24 08:47:12

2023-01-09 08:00:41

JavaScript閉包

2023-12-20 08:23:53

NIO組件非阻塞

2024-12-04 08:40:19

2023-04-26 10:06:08

RocketMQ屬性Consumer

2022-11-28 00:04:17

2024-01-15 12:16:37

2024-02-19 00:00:00

Docker輕量級容器

2022-09-28 18:16:34

JavaJDK

2024-07-30 08:22:47

API前端網(wǎng)關(guān)

2024-11-08 09:48:38

異步編程I/O密集
點贊
收藏

51CTO技術(shù)棧公眾號

欧美老女人xx| 亚洲一区二区av在线| 欧日韩在线观看| 偷拍夫妻性生活| 日本午夜精品久久久久| 亚洲免费观看视频| 精品欧美一区二区久久久伦| 91视频久久久| 欧美91精品| 日韩高清人体午夜| 亚洲这里只有精品| 秋霞在线午夜| 国产日韩av一区| 亚洲xxxxx| 中文字幕一区二区人妻电影| 亚洲无中文字幕| 精品一区二区电影| 国内av一区二区| 中文字幕激情小说| 日韩一级免费看| 性做久久久久久久| 日日夜夜免费精品| 九九热在线精品视频| 久久久久久有精品国产| 久久久男人的天堂| 欧美精品资源| 亚洲成a人v欧美综合天堂 | 亚洲第一综合网站| av成人在线播放| 欧美成人黄色| 亚洲成人福利片| 亚洲永久激情精品| 午夜在线视频免费| 国产精品1区2区| 国产精品视频网| 69国产精品视频免费观看| 欧美日韩一卡| 久久色精品视频| 亚洲精品国产一区黑色丝袜| 国产+成+人+亚洲欧洲在线| 欧美丰满一区二区免费视频| 农村妇女精品一二区| 色av手机在线| 亚洲免费电影在线| 亚洲成人自拍视频| 深夜福利免费在线观看| 成人福利视频在线| 999精品视频一区二区三区| 亚洲天天综合网| 免费人成精品欧美精品| 日本欧美在线视频| 久久久精品毛片| 久久久www| 日产精品99久久久久久| 中国一级免费毛片| 国产欧美日韩综合一区在线播放 | www.成人爱| 亚洲成人在线免费| 精品国产一区二区三区无码| 亚洲卡一卡二| 亚洲午夜久久久久久久久电影网| 51xx午夜影福利| 美足av综合网| 激情亚洲一区二区三区四区| 日本a视频在线观看| 黄色在线网站噜噜噜| 精品国产999| 国产日韩一区二区在线| 吉吉日韩欧美| 色88888久久久久久影院野外| 国产麻花豆剧传媒精品mv在线| 亚洲综合电影| 欧美三级日韩三级国产三级| 91人人澡人人爽人人精品| 成人精品国产| 日韩一区二区精品葵司在线| 久久久无码人妻精品无码| 成人激情自拍| 亚洲精品小视频| 国内精品卡一卡二卡三| 欧美成人激情| 欧美激情视频三区| 国内免费精品视频| 秋霞av亚洲一区二区三| 91精品久久久久久久久| 99在线观看免费| jiyouzz国产精品久久| 免费看国产精品一二区视频| a天堂在线资源| 亚洲黄色小说网站| 18禁免费无码无遮挡不卡网站| 亚洲精品一区三区三区在线观看| 欧美日韩一区二区三区四区| 欧洲成人午夜精品无码区久久| 欧美天堂影院| 日韩视频免费在线| 久久精品国产成人av| 麻豆国产精品777777在线| 国产精品theporn88| 久久av少妇| 一区二区三区国产| 欧美日韩亚洲一二三| 久久gogo国模啪啪裸体| 亚洲精品资源美女情侣酒店| www.av免费| 久久久久国产精品一区三寸| 97超碰人人模人人爽人人看| 韩国福利在线| 亚洲成人1区2区| 日韩av一卡二卡三卡| 亚洲三级网址| 欧美成人免费小视频| 国产亚洲欧美日韩高清| 国产精品羞羞答答xxdd | 亚洲精品一二三区区别| 欧美与欧洲交xxxx免费观看| 国产人妻精品一区二区三| 久久久久国产一区二区三区四区| 国产精品视频网站在线观看| 福利一区二区免费视频| 日韩精品视频在线| 久久精品99国产精| 久久99精品国产.久久久久久| 久久国产精品久久| 黄污视频在线观看| 91精品国产综合久久精品app| 91中文字幕永久在线| 亚洲成人原创| 99在线观看视频| 久草免费在线| 欧美日本视频在线| 国产一区二区三区四区五区六区| 亚洲美女网站| 国产免费一区| 美足av综合网| 精品99一区二区三区| 日本二区三区视频| 免费在线看成人av| 视频在线观看成人| 欧美粗大gay| 日韩激情在线视频| 在线观看亚洲欧美| 337p粉嫩大胆噜噜噜噜噜91av| 激情五月婷婷六月| www.丝袜精品| 欧美疯狂性受xxxxx另类| 国产偷拍一区二区| 亚洲欧美偷拍三级| 视频免费1区二区三区| 97精品国产| 亚洲精品欧美日韩专区| 国产网站在线免费观看| 日韩小视频在线观看专区| 黑鬼狂亚洲人videos| 国产成人在线电影| 菠萝蜜视频在线观看入口| 欧美电影院免费观看| 欧美成人一二三| 日本黄色一区二区三区| 精品久久香蕉国产线看观看亚洲| 国产精品亚洲a| 在线视频二区| 欧美午夜寂寞影院| www.色小姐com| 六月丁香婷婷色狠狠久久| 日韩少妇中文字幕| 日本.亚洲电影| 亚洲成人自拍| caoporn国产精品免费视频| 色婷婷av一区二区三区软件| 一级性生活大片| 日欧美一区二区| 自拍偷拍亚洲一区| 人人爽人人爽人人片av| 久久欧美中文字幕| 亚洲这里只有精品| 天堂成人在线观看| 国产成人免费在线观看不卡| 最新av在线免费观看| 久久wwww| 2019中文字幕在线免费观看| 国产精品无码2021在线观看| 欧美在线视频全部完| 538精品在线视频| 亚洲性生活大片| 亚洲一区久久| 日韩不卡av| 99久久99九九99九九九| 欧美精品在线免费播放| 六月婷婷中文字幕| 色婷婷综合久久久久中文一区二区 | 26uuu国产电影一区二区| 亚洲熟女乱色一区二区三区| 大片网站久久| 国产伦精品一区二区三区四区视频 | 欧美国产极品| 国产精品入口日韩视频大尺度| 中文字幕有码在线观看| 日韩经典中文字幕| 国产毛片在线视频| 欧美视频在线观看免费网址| 欧美人与禽zoz0善交| 成人99免费视频| 国产精品视频中文字幕| 亚洲一区不卡| 老汉色影院首页| 青青草国产免费一区二区下载| 99久re热视频这里只有精品6| 日韩欧美少妇| 久久久噜噜噜久久中文字免| 三区四区电影在线观看| 精品国产一区二区精华| 夜夜骚av一区二区三区| 欧美日韩亚洲视频一区| 免费一级全黄少妇性色生活片| 日本一区二区成人| 国产精品三级在线观看无码| 国产激情91久久精品导航| 国产精品视频一区国模私拍 | 五月婷婷深爱五月| 99国产精品| 欧美做受777cos| 日韩免费视频| 日本一区二区精品视频| 欧美国产不卡| 国产精品日韩二区| 日韩久久一区| 国产一区二区在线免费| 亚洲电影有码| 国产成人aa精品一区在线播放 | 欧美成人嫩草网站| 亚州欧美一区三区三区在线| 亚洲小说图片| 蜜桃999成人看片在线观看| 777久久精品| 97netav| 日本免费一区二区三区视频| 国产在线精品一区免费香蕉| 97精品国产综合久久久动漫日韩 | 国产午夜精品久久久久久免费视| 免费中文字幕av| av在线不卡电影| 中文字幕在线视频播放| 成人免费av网站| 亚洲图片欧美另类| 成人黄色网址在线观看| 扒开伸进免费视频| 成人黄色在线看| 日本一卡二卡在线| 成人av在线播放网站| 国产chinese中国hdxxxx| 成人久久视频在线观看| 日韩www视频| 久久亚洲综合av| 日本少妇xxxxx| 国产精品久久久久久亚洲毛片 | 制服丝袜在线第一页| 成人免费毛片a| 人妻丰满熟妇aⅴ无码| 久久综合999| 五月婷婷婷婷婷| 亚洲女与黑人做爰| 久久网一区二区| 黑人欧美xxxx| 亚洲精品国产精品乱码视色| 欧美日韩国产一级二级| 国产999久久久| 精品国产一区二区三区四区四| 性xxxx搡xxxxx搡欧美| 亚洲无线码在线一区观看| 在线视频婷婷| 久久久欧美精品| 在线男人天堂| 国产主播欧美精品| eeuss国产一区二区三区四区| 久草一区二区| 91亚洲国产| 秋霞无码一区二区| 男女性色大片免费观看一区二区 | 国产精品免费大片| 正在播放国产精品| 亚洲成人中文| 国产精品一区二区羞羞答答| 国产成人在线视频免费播放| 中文人妻一区二区三区| 国产精品久久久久久久蜜臀| 久久免费在线观看视频| 在线观看日韩av先锋影音电影院| 国产婷婷在线视频| 亚洲欧美日韩在线高清直播| 久草中文在线| 欧洲美女免费图片一区| 99精品在线免费观看| 免费av在线一区二区| 天天射综合网视频| 成人观看免费完整观看| 精品一区二区三区久久久| avtt香蕉久久| 日韩美女啊v在线免费观看| 久久艹免费视频| 91精品免费在线| 美国成人毛片| 欧美黄色免费网站| 久久免费影院| 欧美18视频| 亚洲视屏一区| 911av视频| 国产精品无码永久免费888| 日韩成人av毛片| 欧美一区二区三区不卡| 阿v免费在线观看| 久久久亚洲欧洲日产国码aⅴ| 国产福利91精品一区二区| 久久99精品久久久久久水蜜桃 | ww国产内射精品后入国产| 久久99久久精品| 国产人妻大战黑人20p| 香蕉成人啪国产精品视频综合网| 国产又粗又大又黄| 中文字幕日韩av综合精品| 在线免费av资源| 精品一区二区三区视频日产| 欧美激情91| 亚洲欧美天堂在线| 国产精品萝li| 亚洲 小说区 图片区| 亚洲欧美日韩中文在线| av资源在线| av一区观看| 欧美破处大片在线视频| 在线观看日本www| 中文字幕亚洲一区二区av在线| 无码人妻久久一区二区三区不卡| 亚洲精品xxxx| 高潮在线视频| 久久免费一区| 久久aⅴ乱码一区二区三区| 玖玖爱在线精品视频| 性做久久久久久免费观看| 黄色av中文字幕| 欧美理论电影在线播放| 狂野欧美xxxx韩国少妇| 一区二区三区四区免费观看| 精品一区二区三区视频在线观看| 黄色裸体一级片| 欧美人妖巨大在线| 精品176二区| 91最新在线免费观看| 欧美在线网站| 特级特黄刘亦菲aaa级| 亚洲一区免费在线观看| 欧美 日韩 国产 在线| 6080yy精品一区二区三区| 天海翼精品一区二区三区| 国内外成人激情视频| 国产亚洲欧美日韩俺去了| 波多野结衣视频在线观看| 最新中文字幕亚洲| 国产精品igao视频网网址不卡日韩 | 国产吃瓜黑料一区二区| 午夜欧美视频在线观看| 香蕉视频网站在线| 国产精品露脸自拍| 国产精品久久久久蜜臀| 中文字幕永久免费| 日韩欧美在线视频| porn视频在线观看| 91在线精品视频| 亚洲国产精品一区制服丝袜| 久久久久久久久久久国产精品| 在线精品视频一区二区| 欧美一区二区三区在线观看免费| 亚洲自拍欧美另类| 99精品国产在热久久| 阿v天堂2014| 欧美大片国产精品| 性欧美18xxxhd| 一区二区三区不卡在线| 成人美女视频在线观看| 亚洲成人第一网站| 久久久www成人免费精品| 国产精品巨作av| 91香蕉视频导航| 亚洲综合偷拍欧美一区色| 毛片在线能看| 91久久国产精品91久久性色| 在线亚洲观看| 久久久久久久久久97| 精品对白一区国产伦| 国产精品毛片久久久久久久久久99999999 | 天天射天天操天天干| 国产精品视频白浆免费视频| 亚洲午夜91| 一二三四在线观看视频| 精品国产sm最大网站| 97精品国产综合久久久动漫日韩| 妞干网视频在线观看| 国产精品久久福利| 五月婷婷六月激情| 97伦理在线四区|