精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

亚洲日本理论电影| 国产精品人成电影在线观看| 善良的小姨在线| 色爱综合区网| 91尤物视频在线观看| 奇米成人av国产一区二区三区| 高清国产在线观看| 中文字幕久久精品一区二区 | 国产午夜精品理论片在线| 日韩三级久久| 在线观看亚洲成人| 一本大道东京热无码aⅴ| 日本在线视频1区| 久久99精品久久久久久动态图| 欧美精品videos| 国产三级在线观看完整版| 伊人www22综合色| 欧美亚洲一区二区三区四区| 国产乱人伦精品一区二区三区| 欧美拍拍视频| 国产成人综合在线播放| 国产精品视频永久免费播放 | 日韩欧美精品中文字幕| 欧美精品久久96人妻无码| 欧美套图亚洲一区| 东方欧美亚洲色图在线| 国产女精品视频网站免费| 一级片视频在线观看| 国产精品大片免费观看| 正在播放欧美一区| 国偷自产av一区二区三区麻豆| 欧美free嫩15| 黑人巨大精品欧美一区二区三区 | 欧美日韩在线三级| 欧美精品一区免费| 在线看女人毛片| 国产精品久久久久久久久晋中 | 日本成人精品在线| 精品午夜福利在线观看| 欧美 日韩 国产一区二区在线视频| 一本色道久久综合狠狠躁篇的优点 | 欧美三级电影网址| 色婷婷久久综合| 免费国产a级片| japanese色国产在线看视频| 亚洲日本欧美天堂| 欧美性视频在线播放| 在线观看精品一区二区三区| 久久青草欧美一区二区三区| 久久国产精品久久精品国产| 日韩在线视频观看免费| 国产福利一区二区三区视频| 91精品在线影院| 一级片在线观看视频| 久久精品国产亚洲高清剧情介绍| 国产成人亚洲综合青青| 中文字幕国产在线观看| 久久久蜜桃一区二区人| 日韩免费黄色av| 久久国产乱子伦精品| 老牛嫩草一区二区三区日本| 日韩美女视频免费看| 国产三级精品三级在线观看| 美女网站久久| 国产精品福利在线观看| 中文天堂在线播放| 精品一区二区免费在线观看| 成人精品在线视频| 国产高清免费观看| 丁香婷婷综合色啪| 久久精品ww人人做人人爽| 三区在线观看| 欧美激情一区二区三区蜜桃视频| 亚洲国产精品综合| 成人影院www在线观看| 一区二区三区日韩欧美精品| 中文精品无码中文字幕无码专区| 青春草在线视频| 亚洲va天堂va国产va久| 丰满少妇被猛烈进入高清播放| 黑人巨大精品欧美一区二区桃花岛| 日本乱码高清不卡字幕| 在线观看免费污视频| 精品国产一区二区三区性色av| 日韩欧美一区二区不卡| 久久久久麻豆v国产精华液好用吗| 先锋影音国产精品| 日韩中文字幕在线精品| 麻豆国产尤物av尤物在线观看| 亚洲精品字幕| 日韩av色综合| 精品国产无码AV| 91偷拍与自偷拍精品| 亚洲国产一区二区三区在线播| 黄色成人影院| 欧美日韩中文字幕日韩欧美| 污污动漫在线观看| 红杏aⅴ成人免费视频| 亚洲最新视频在线| 久久黄色免费视频| 日韩国产在线一| 爱情岛论坛亚洲入口| 久久电影中文字幕| 一区二区三区欧美在线观看| 日本在线观看a| 欧美日韩黄色| 国产一区二区三区在线观看视频 | 日本一区二区三区www| 国产黄色在线观看| 一本到一区二区三区| 艹b视频在线观看| 欧美激情15p| 不卡中文字幕av| 中文字幕 人妻熟女| 波多野结衣在线一区| 一级一片免费播放| 国产精品专区免费| 日韩欧美国产成人一区二区| 亚洲精品色午夜无码专区日韩| 欧美另类视频| 成人www视频在线观看| 午夜性色福利视频| 一区二区免费看| 911福利视频| 蜜桃a∨噜噜一区二区三区| 色综合久综合久久综合久鬼88| jizz国产在线| 久久久久久97三级| 2018国产在线| 91久久精品无嫩草影院| www.欧美免费| 亚洲天堂网视频| 国产喂奶挤奶一区二区三区| 黄色免费视频大全| 欧美黑白配在线| 97香蕉超级碰碰久久免费的优势| 国产又黄又爽视频| 国产精品久久久久久久久晋中| 动漫av免费观看| 同性恋视频一区| 91高清在线免费观看| 黄色小视频免费在线观看| 亚洲日本韩国一区| 91看片破解版| 亚洲自拍偷拍网| 亚洲一区亚洲二区| 成人看av片| 欧美精品日韩一本| 亚洲女人久久久| 精品中文字幕一区二区小辣椒| 视频一区二区在线观看| 日韩一区二区三区免费| 亚洲性无码av在线| 一级片免费在线播放| 久久精品亚洲麻豆av一区二区| 高清在线观看免费| 一区二区三区韩国免费中文网站| 97久久久久久| 清纯唯美亚洲色图| 欧美中文一区二区三区| www色com| 黄页视频在线91| 国产精品美女在线播放| 日韩欧美中文字幕一区二区三区| 欧美大片在线看| 日本wwwxxxx| 日韩欧美在线视频观看| 91麻豆制片厂| 激情文学综合丁香| 国产青草视频在线观看| 露出调教综合另类| 国产成人精品日本亚洲| 91av资源在线| 欧美不卡在线视频| 国产精品国产三级国产专区52| 久久精品亚洲乱码伦伦中文| 中文字幕精品一区二区三区在线| 亚洲欧美综合国产精品一区| 电影午夜精品一区二区三区| 中文在线资源| 日韩中文视频免费在线观看| 精品人妻一区二区三区麻豆91| 亚洲成人福利片| 丰满圆润老女人hd| 精品写真视频在线观看| 丝袜人妻一区二区三区| 国产欧美高清视频在线| 成人乱色短篇合集| av在线资源| 中文字幕亚洲欧美日韩2019| 精品人妻一区二区三区三区四区 | 欧美精品videossex88| 天堂a√中文在线| 欧美区视频在线观看| 精品少妇一二三区| 国产欧美精品区一区二区三区| 日韩欧美理论片| 校园春色综合网| 男人天堂网站在线| 国产精品片aa在线观看| 99国产视频在线| 成人做爰视频www| 久久男人av资源网站| 成人免费黄色网页| 亚洲福利在线观看| 国产精品久久久久久免费| 岛国精品视频在线播放| 免费看一级大片| 国产亚洲精品bt天堂精选| 老司机av网站| 麻豆freexxxx性91精品| 成年人观看网站| 亚洲特级毛片| 国产成年人在线观看| 国产欧美日韩免费观看| 国产成人精品免费视频大全最热| 成人在线视频观看| 2019中文字幕全在线观看| 中文字幕伦理免费在线视频| 中文字幕亚洲欧美一区二区三区| 亚洲三区在线播放| 精品免费国产一区二区三区四区| 一区二区三区免费在线| 91福利在线观看| 国产成人无码精品久久久久| 亚洲免费视频成人| 国产黄色片在线| 国产午夜三级一区二区三| 少妇被狂c下部羞羞漫画| 国产成人精品免费视频网站| 999这里有精品| 激情综合色播激情啊| 天天干天天爽天天射| 天堂成人免费av电影一区| 国产二区视频在线| 黄色成人精品网站| 欧美交换配乱吟粗大25p| 亚洲女同一区| 日本精品免费视频| 久久久久国产精品| 天天爱天天做天天操| 99精品电影| 宅男在线精品国产免费观看| 欧美肉体xxxx裸体137大胆| 日本不卡久久| 欧美精品系列| 亚洲乱码一区二区三区| 日本久久黄色| 一本一本久久a久久精品综合妖精| 国产一区二区三区四区二区 | 91精品国产麻豆国产在线观看| 亚洲精品一卡二卡三卡四卡| 日韩www.| 国产精品夜夜夜爽张柏芝| 亚洲久久久久| 欧美无砖专区免费| 国产日韩1区| 日本熟妇人妻xxxxx| 日韩电影在线免费看| 一区二区三区 日韩| 狠狠色综合日日| 在线视频日韩欧美| 高清不卡在线观看| 精品人妻一区二区三区日产| 91蜜桃视频在线| 一级片黄色录像| 亚洲精品中文在线影院| 国产无码精品在线观看| 午夜激情一区二区三区| 香蕉污视频在线观看| 欧美日韩dvd在线观看| 精品乱子伦一区二区| 日韩精品视频免费在线观看| 黄色大片在线看| 久久精品视频在线| 免费男女羞羞的视频网站在线观看 | 欧美zozo另类异族| 天天操天天干天天爱| 国产亚洲欧洲高清一区| av毛片在线免费| 2019av中文字幕| 欧美特黄色片| 国产精品视频500部| 国产成人调教视频在线观看| 二级片在线观看| 亚洲黄色影片| 性刺激的欧美三级视频| 国产99久久久久久免费看农村| www.自拍偷拍| 最新欧美精品一区二区三区| 亚欧洲精品在线视频| 在线观看视频一区| 亚洲黄色片视频| 亚洲一二在线观看| 九色91在线| 国产精品自产拍在线观| 九九热播视频在线精品6| 亚洲精品中文字幕乱码三区不卡| 欧美三级不卡| 啊啊啊国产视频| www.在线欧美| 日本中文在线视频| 色综合久久久网| 亚洲男女视频在线观看| 亚洲最新av在线网站| caoporn视频在线| 成人黄色片网站| 一区二区美女| 免费在线观看视频a| 九色综合国产一区二区三区| 亚洲第九十七页| 亚洲乱码日产精品bd| 波多野结衣毛片| 亚洲激情 国产| av在线免费网站| 国产欧美日韩中文字幕| 免费视频亚洲| 国产 日韩 欧美在线| 国产乱码精品一区二区三区忘忧草| 国产女主播喷水高潮网红在线| 一区二区三区在线视频观看 | 欧美激情一区二区三区在线视频| 一二三区不卡| 亚洲综合激情视频| 中文无字幕一区二区三区| 精品成人免费视频| 欧美一区二区三区免费在线看| 在线激情网站| 国产精品午夜视频| 国产a久久精品一区二区三区| av免费观看大全| 成人av在线一区二区| 国产一区二区视频在线观看免费| 欧美三日本三级三级在线播放| 欧美黄色小说| 日本欧美一二三区| 亚洲最好看的视频| 亚洲午夜无码av毛片久久| 99精品国产热久久91蜜凸| 久久久久久国产精品免费播放| 欧美精品v国产精品v日韩精品 | 色无极亚洲影院| 一级片视频免费观看| 国产亚洲一区二区三区在线观看| 久久久久久久久久影院| 亚洲精品一区二区三区99| 成人午夜在线影视| 91精品在线播放| 欧美精品一级| 国产婷婷在线观看| 婷婷开心久久网| 欧美日韩在线中文字幕| 国产极品精品在线观看| 青青一区二区三区| 一个色综合久久| 亚洲男人的天堂一区二区| av中文字幕第一页| 国内精品久久久久久中文字幕| 嗯用力啊快一点好舒服小柔久久| 欧美不卡在线播放| 91热门视频在线观看| а中文在线天堂| 久久久国产91| 国产精品tv| 99热成人精品热久久66| 国产无一区二区| 国产情侣激情自拍| 午夜精品久久久久久久99热浪潮| 人妖一区二区三区| 欧美特级aaa| 一区二区三区精密机械公司| 欧美一级一区二区三区| 日本三级韩国三级久久| 成人综合一区| 激情综合激情五月| 欧美日韩亚洲网| 麻豆视频在线免费观看| 国产嫩草一区二区三区在线观看| 另类激情亚洲| 婷婷久久综合网| 亚洲精品98久久久久久中文字幕| 欧美理论影院| 老司机午夜网站| 26uuu国产在线精品一区二区| 中文字幕 国产精品| 欧美成人午夜剧场免费观看| 天堂99x99es久久精品免费| 波多野结衣xxxx| 五月综合激情婷婷六月色窝| jizz视频在线观看| 国产富婆一区二区三区| 秋霞午夜av一区二区三区| 免费中文字幕在线观看| 亚洲人成人99网站| 久久中文字幕一区二区| 日韩中文字幕免费在线| 亚洲一卡二卡三卡四卡| 亚洲xxxxxx| 九九热久久66| 国产一区二区成人久久免费影院|