自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

漫畫(huà)講解Kafka高效的存儲(chǔ)設(shè)計(jì)

存儲(chǔ) 存儲(chǔ)軟件 Kafka
索引文件存儲(chǔ)大量元數(shù)據(jù),數(shù)據(jù)文件存儲(chǔ)大量消息,索引文件中元數(shù)據(jù)指向?qū)?yīng)數(shù)據(jù)文件中message的物理偏移地址。
[[347741]]

 

在開(kāi)始講解之前,先帶著大家回憶一下kafka一些名詞概念:

a. Broker:提供數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)讀寫(xiě)服務(wù)實(shí)例,一個(gè)Kafka節(jié)點(diǎn)就是一個(gè)broker,多個(gè)broker可以組成一個(gè)Kafka集群。

b. Topic:代表的是一類消息,例如應(yīng)用日志的topic,應(yīng)用健康監(jiān)控指標(biāo)的topic等。

c. Partition:topic物理上的分組,一個(gè)topic可以分為多個(gè)partition。

d. Segment:partition物理上由多個(gè)segment組成,每個(gè)segment是一個(gè)文件。

e. offset:每個(gè)partition都由一系列有序的、不可變的消息組成,這些消息被連續(xù)的追加到partition中。partition中的每個(gè)消息都有一個(gè)連續(xù)的序列號(hào)叫做offset,用于partition唯一標(biāo)識(shí)一條消息.

 

下面是兩個(gè)topic,頁(yè)面瀏覽流量日志的topic page_view,和點(diǎn)擊日志 click_log,在kafka數(shù)據(jù)目錄下的分區(qū)存儲(chǔ)情況:

  1. |--page_view-0 
  2.           |--page_view-1 
  3.           |--page_view-2 
  4.           |--page_view-3 
  5.           |--click_log-0 
  6.           |--click_log-1 
  7.           |--click_log-2 
  8.           |--click_log-3 

 

下圖說(shuō)明了文件的存儲(chǔ)方式:

 

  • 每個(gè)partion(目錄)相當(dāng)于一個(gè)巨型文件被平均分配到多個(gè)大小相等segment(段)數(shù)據(jù)文件中。但每個(gè)段segment file消息數(shù)量不一定相等,這種特性方便old segment file快速被刪除。
  • 每個(gè)partiton只需要支持順序讀寫(xiě)就行了,segment文件生命周期由服務(wù)端配置參數(shù)決定。

這樣做的好處就是能快速刪除無(wú)用文件,有效提高磁盤(pán)利用率。

 

partition中segment file組成和物理結(jié)構(gòu),細(xì)節(jié)如下:

  • segment file組成:由2大部分組成,分別為index文件和data文件,這兩個(gè)文件一一對(duì)應(yīng),成對(duì)出現(xiàn),后綴”.index”和“.log”分別表示為segment索引文件、數(shù)據(jù)文件.
  • segment文件命名規(guī)則:partion全局的第一個(gè)segment從0開(kāi)始,后續(xù)每個(gè)segment文件名為上一個(gè)segment文件最后一條消息的offset值。數(shù)值最大為64位long大小,19位數(shù)字字符長(zhǎng)度,沒(méi)有數(shù)字用0填充。

創(chuàng)建一個(gè)topicXXX包含1 partition,設(shè)置每個(gè)segment大小為500MB,并啟動(dòng)producer向Kafka broker寫(xiě)入大量數(shù)據(jù),該partition文件內(nèi)容如下:

 

圖1

 

還有一張細(xì)節(jié)的圖,說(shuō)明一些index文件和log文件的對(duì)應(yīng)關(guān)系:

 

圖2

索引文件存儲(chǔ)大量元數(shù)據(jù),數(shù)據(jù)文件存儲(chǔ)大量消息,索引文件中元數(shù)據(jù)指向?qū)?yīng)數(shù)據(jù)文件中message的物理偏移地址。其中以索引文件中元數(shù)據(jù)3,497為例,依次在數(shù)據(jù)文件中表示第3個(gè)message(在全局partiton表示第368772個(gè)message)、以及該消息的物理偏移地址為497。

 

例如讀取offset=368776的message,需要通過(guò)下面2個(gè)步驟查找。

第一步查找segment file 以前面圖1為例,其中00000000000000000000.index表示最開(kāi)始的文件,起始偏移量(offset)為0.第二個(gè)文件00000000000000368769.index的消息量起始偏移量為368770 = 368769 + 1.同樣,第三個(gè)文件00000000000000737337.index的起始偏移量為737338=737337 + 1,其他后續(xù)文件依次類推,以起始偏移量命名并排序這些文件,只要根據(jù)offset **二分查找**文件列表,就可以快速定位到具體文件。當(dāng)offset=368776時(shí)定位到00000000000000368769.index|log

第二步 圖2 ,通過(guò)segment file查找message 通過(guò)第一步定位到segment file,當(dāng)offset=368776時(shí),依次定位到00000000000000368769.index的元數(shù)據(jù)物理位置和00000000000000368769.log的物理偏移地址,然后再通過(guò)00000000000000368769.log順序查找直到offset=368776為止。

這樣做的優(yōu)點(diǎn)很明顯,segment index file采取稀疏索引存儲(chǔ)方式,它減少索引文件大小,通過(guò)mmap可以直接內(nèi)存操作,稀疏索引為數(shù)據(jù)文件的每個(gè)對(duì)應(yīng)message設(shè)置一個(gè)元數(shù)據(jù)指針,它比稠密索引節(jié)省了更多的存儲(chǔ)空間,但查找起來(lái)需要消耗更多的時(shí)間。

[[347742]]

本文轉(zhuǎn)載自微信公眾號(hào)「浪尖聊大數(shù)據(jù)」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系浪尖聊大數(shù)據(jù)公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 浪尖聊大數(shù)據(jù)
相關(guān)推薦

2010-06-03 19:38:26

Hadoop

2018-01-25 08:29:28

Kafka源碼存儲(chǔ)

2010-06-17 14:34:18

Rsync 使用

2009-12-01 19:17:48

PHP開(kāi)發(fā)高效WEB系

2017-07-10 09:02:24

NAS存儲(chǔ)云存儲(chǔ)

2014-12-18 23:12:02

云存儲(chǔ)私有云云計(jì)算

2017-11-08 11:22:46

存儲(chǔ)趨勢(shì)系統(tǒng)

2011-04-11 09:16:31

Sybase存儲(chǔ)

2016-03-04 10:50:02

ios圓角高效添加

2010-04-20 16:34:31

2022-12-13 08:39:53

Kafka存儲(chǔ)檢索

2020-09-13 13:26:10

Kafka消費(fèi)者控制器

2017-02-22 13:53:58

云存儲(chǔ)谷歌云模型

2009-09-18 10:40:05

CLR存儲(chǔ)過(guò)程

2018-05-07 10:20:38

Kafka存儲(chǔ)機(jī)制

2017-12-28 15:20:50

2021-07-06 06:39:58

Kafka消息隊(duì)列系統(tǒng)

2019-11-19 14:48:00

Kafka文件存儲(chǔ)

2021-07-14 09:45:24

設(shè)計(jì)師約束布局界面布局

2021-06-29 11:15:06

云計(jì)算云計(jì)算環(huán)境云應(yīng)用
點(diǎn)贊
收藏

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