偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

談?wù)勀銓?duì)Kafka數(shù)據(jù)存儲(chǔ)原理的理解

云計(jì)算 Kafka
今天,我給大家來(lái)聊一聊我對(duì)Kafka零拷貝原理的理解。

一位5年工作經(jīng)驗(yàn)的小伙伴面試的時(shí)候被問到這樣一個(gè)問題,說”談?wù)勀銓?duì)Kafka數(shù)據(jù)存儲(chǔ)原理的理解“。然后,這位小伙伴突然愣住了,什么是零拷貝,零拷貝跟Kafka有關(guān)系嗎?

那么今天,我給大家來(lái)聊一聊我對(duì)Kafka零拷貝原理的理解。

1、Topic主題

在Kafka中,這個(gè)用 來(lái)存儲(chǔ)消息的隊(duì)列叫做Topic,它是一個(gè)邏輯的概念,可以理解為一組消息的集合。

生產(chǎn)者和Topic以及Topic和消費(fèi)者的關(guān)系都是多對(duì)多。一個(gè)生產(chǎn)者可以發(fā)送消息到多個(gè)Topic,一個(gè)消費(fèi)者也可以從多個(gè)Topic獲取消息(但是不建議這么做)。

圖片

生產(chǎn)者發(fā)送消息時(shí),如果Topic不存在,Kafka默認(rèn)會(huì)自動(dòng)創(chuàng)建。

2、Partition分區(qū)

首先,Kafka為了實(shí)現(xiàn)橫向擴(kuò)展,它會(huì)把不同的數(shù)據(jù)存放在不同的Broker上,同時(shí)為了降低單臺(tái)服務(wù)器的訪問壓力,把一個(gè)Topic中的數(shù)據(jù)分隔成多個(gè)Partition。在服務(wù)器上,每個(gè)Partition都有一個(gè)物理目錄,Topic名字后面的數(shù)字標(biāo)號(hào)即代表分區(qū)。比如創(chuàng)建一個(gè)名為mytopic的主題,數(shù)據(jù)目錄被分布到了3臺(tái)機(jī)器。

如圖所示:

圖片

mytopic-0存在A節(jié)點(diǎn),mytopic-1存在B節(jié)點(diǎn),mytopic-2存在C節(jié)點(diǎn)。

3、Replica副本

另外,Kafa為了提高分區(qū)的可靠性,又設(shè)計(jì)了副本機(jī)制。我們創(chuàng)建Topic的時(shí)候,通過指定replication-factor副本因子,來(lái)確定Topic的副本數(shù)。當(dāng)然,副本因子數(shù)必須小于等于節(jié)點(diǎn)數(shù),否則會(huì)報(bào)錯(cuò)。這樣就可以保證,絕對(duì)不會(huì)有一個(gè)分區(qū)的兩個(gè)副本分布在同一個(gè)節(jié)點(diǎn)上,不然副本機(jī)制也失去了備份的意義了。

如圖所示,創(chuàng)建了一個(gè)3個(gè)分區(qū)3個(gè)副本的Topic a3part3rep,被均勻分布到了3個(gè)Broker節(jié)點(diǎn)上,每個(gè)Broker節(jié)點(diǎn)互為備份。

圖片

這些所有的副本分為兩種角色,Leader對(duì)外提供讀寫服務(wù)。Follower唯一的任務(wù)就是從Leader異步拉取數(shù)據(jù),圖中紅色的副本為L(zhǎng)eade,也被均勻分布在各個(gè)節(jié)點(diǎn)上,可以保證讀寫均勻,這樣的設(shè)計(jì)也稱為單調(diào)讀一致性。

?4、Segment分段

Kakfa為了防止Log不斷追加導(dǎo)致文件過大,導(dǎo)致檢索消息效率變低,一個(gè)Partition超出一定大小的時(shí)候,就被切割為多個(gè)Segment來(lái)組織數(shù)據(jù)。在磁盤上,每個(gè)Segment由一個(gè)log文件和2個(gè)index文件組成。

圖片

如圖所示,這三個(gè)文件是成套出現(xiàn)的。其中.index是用來(lái)存儲(chǔ)Consumer的Offset偏移量的索引文件,.timeindex是用來(lái)存儲(chǔ)消息時(shí)間戳的索引文件,log文件就是用來(lái)存儲(chǔ)具體的數(shù)據(jù)文件。

以切割時(shí)記錄的Offset值作為文件的名字。它的文件結(jié)構(gòu)是這樣的,如圖所示:

圖片

?5、Index索引

前面我們講到Kafka設(shè)計(jì)了兩種索引,一種是偏移量索引文件,記錄的是Offset和消息在Log文件中的位置映射關(guān)系。一種是時(shí)間戳索引文件,記錄的是時(shí)間戳和Offset的關(guān)系。為了提高檢索效率Kafka并不會(huì)為每一條消息都會(huì)建立索引,而是采用稀疏索引。也就是說隔一批消息才產(chǎn)生一條索引記錄。如圖所示:

圖片

責(zé)任編輯:姜華 來(lái)源: Tom彈架構(gòu)
相關(guān)推薦

2022-09-23 11:00:27

KafkaZookeeper機(jī)制

2023-11-28 12:25:02

多線程安全

2022-06-30 09:10:33

NoSQLHBaseRedis

2022-09-06 11:13:16

接口PipelineHandler

2022-08-26 00:02:03

RocketMQ單體架構(gòu)MQ

2022-09-19 07:57:59

云服務(wù)互聯(lián)網(wǎng)基礎(chǔ)設(shè)施

2024-09-02 16:10:19

vue2前端

2022-08-29 16:03:33

狀態(tài)流轉(zhuǎn)Java

2024-09-20 05:46:00

2024-09-11 16:49:55

2022-10-09 15:18:31

SwaggerOpenAPI工具

2022-09-09 10:15:06

OAuthJava

2022-03-21 09:05:18

volatileCPUJava

2025-03-21 00:00:05

Reactor設(shè)計(jì)模式I/O 機(jī)制

2024-10-24 16:14:43

數(shù)據(jù)傳輸CPU零拷貝

2022-08-26 00:21:44

IO模型線程

2024-12-06 14:34:00

Spring過濾器

2025-03-07 00:11:00

JWTJSONSession

2025-02-21 15:25:54

虛擬線程輕量級(jí)

2024-09-27 15:43:52

零拷貝DMAIO
點(diǎn)贊
收藏

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