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

Kafka為什么會(huì)這么快

大數(shù)據(jù) Kafka
在系統(tǒng)設(shè)計(jì)中,會(huì)用到消息中間件來(lái)做服務(wù)異步化,系統(tǒng)解耦,或者是做流量削峰,常用的消息中間件有rabbitMq,activeMq以及阿里的RocketMq等等,都各自有各自的優(yōu)勢(shì),但是就吞吐量來(lái)說(shuō),kafka是其中的佼佼者。

在系統(tǒng)設(shè)計(jì)中,會(huì)用到消息中間件來(lái)做服務(wù)異步化,系統(tǒng)解耦,或者是做流量削峰,常用的消息中間件有rabbitMq,activeMq以及阿里的RocketMq等等,都各自有各自的優(yōu)勢(shì),但是就吞吐量來(lái)說(shuō),kafka是其中的佼佼者。在單機(jī)情況下,網(wǎng)友做的對(duì)比如下:

 

Kafka為什么會(huì)這么快
性能對(duì)比

為什么kafka會(huì)這么快呢?

發(fā)布訂閱模式

一個(gè)普通的發(fā)布訂閱模型如下圖所示:

 

Kafka為什么會(huì)這么快
發(fā)布訂閱模式

以kafka為例,生產(chǎn)者產(chǎn)生消息,并將消息Push到kafka集群,消費(fèi)者主動(dòng)去kafka集群Pull數(shù)據(jù)。這種模型有個(gè)好處,消費(fèi)的速率完全由消費(fèi)者控制,kafka集群類似于一個(gè)蓄水池,避免因生產(chǎn)者產(chǎn)生消息過(guò)快消費(fèi)者來(lái)不及消費(fèi)而導(dǎo)致消費(fèi)者被壓垮的現(xiàn)象。

kafka為什么快要從兩方面分析,生產(chǎn)者產(chǎn)生的消息寫(xiě)入集群時(shí)快和消費(fèi)者消費(fèi)消息時(shí)從集群讀取快。

寫(xiě)入快

寫(xiě)入快主要是兩方面原因:順序?qū)懭牒蚆MFile。

順序?qū)懭?/strong>

kafka將消息存儲(chǔ)在硬盤(pán),通常認(rèn)為硬盤(pán)的讀寫(xiě)是比較慢,但是為什么kafka快呢?平時(shí)所說(shuō)的磁盤(pán)讀寫(xiě)慢是指隨機(jī)讀寫(xiě)比較慢,因?yàn)榇疟P(pán)每次隨機(jī)讀寫(xiě)都要物理尋址,這是非常耗時(shí)的操作,順序讀寫(xiě)的速度還是比較快的。如下圖所示:

 

Kafka為什么會(huì)這么快
順序?qū)懭?/center>

kafka每次收到新的消息之后都會(huì)將消息存儲(chǔ)在尾部,按照順序存儲(chǔ)消息。但是消息一旦存儲(chǔ)無(wú)法刪除。

當(dāng)消費(fèi)者消費(fèi)時(shí)也是順序消費(fèi),每個(gè)消費(fèi)者會(huì)有一個(gè)偏移量,記錄當(dāng)前消費(fèi)的消息的位置。如下圖所示:

 

Kafka為什么會(huì)這么快
順序消費(fèi)

MMFile

MMFile是指Memory Mapped Files,即內(nèi)存映射技術(shù)。操作系統(tǒng)為了解決內(nèi)存和硬盤(pán)讀寫(xiě)速度之間的差異,采用了內(nèi)存映射技術(shù),內(nèi)存被劃分為若干頁(yè),每一頁(yè)被映射到一塊磁盤(pán)空間,因?yàn)閮?nèi)存是遠(yuǎn)遠(yuǎn)小于磁盤(pán)空間的,所以分頁(yè)經(jīng)常會(huì)按照一定的算法加載到內(nèi)存,例如先進(jìn)先出(FIFO),最近最少使用(LRU)等。內(nèi)存中分頁(yè)和磁盤(pán)空間對(duì)應(yīng),操作系統(tǒng)會(huì)在合適的時(shí)候?qū)?nèi)存分頁(yè)中的數(shù)據(jù)定時(shí)刷磁盤(pán)中去。這種方式為什么可以提高寫(xiě)入效率呢?通常CPU執(zhí)行過(guò)程中為了安全分為內(nèi)核態(tài)和用戶態(tài)。只有內(nèi)核態(tài)才能操作iO設(shè)備,內(nèi)存空間分為內(nèi)核空間和用戶空間。通常內(nèi)存中的數(shù)據(jù)寫(xiě)入到磁盤(pán)要以下幾步:

 

Kafka為什么會(huì)這么快
write操作

數(shù)據(jù)會(huì)先從用戶空間拷貝到內(nèi)核空間,然后再由內(nèi)核空間寫(xiě)入IO設(shè)備。而MMFile則省去了一次用數(shù)據(jù)從戶空間到內(nèi)核空間復(fù)制的開(kāi)銷。

讀取快

讀取快主要是因?yàn)榱憧截?Zero Copy)技術(shù)。上面介紹到數(shù)據(jù)從內(nèi)存空間寫(xiě)入磁盤(pán)的步驟,那么從磁盤(pán)讀取數(shù)據(jù)剛好相反,具體過(guò)程如下:

 

Kafka為什么會(huì)這么快
read操作

數(shù)據(jù)先從磁盤(pán)讀取到內(nèi)核空間,然后再?gòu)膬?nèi)核空間復(fù)制到用戶空間,然后再到Socket,最后傳輸?shù)较M(fèi)者。

Linux提供了一種sendFile系統(tǒng)調(diào)用,可以將數(shù)據(jù)直接由磁盤(pán)拷貝到內(nèi)核空間。省去了一次數(shù)據(jù)從用戶空間到內(nèi)核空間的復(fù)制。這就是所謂的零拷貝技術(shù)。

上面從讀寫(xiě)兩個(gè)角度分析了為什么kafka吞吐量高,其實(shí)還有一個(gè)重要的原因。

批量數(shù)據(jù)壓縮

kafka不會(huì)對(duì)每個(gè)消息都做壓縮,而是對(duì)一批消息壓縮,然后將數(shù)據(jù)統(tǒng)一發(fā)送。將所有的消息變?yōu)橐粋€(gè)批量文件,然后直接丟給消費(fèi)者。

綜上所述,kafka通過(guò)MMFile技術(shù)快速將數(shù)據(jù)順序?qū)懭氪疟P(pán),在讀取時(shí)通過(guò)零拷貝技術(shù)快速讀取,然后通過(guò)批量數(shù)據(jù)壓縮將數(shù)據(jù)傳輸?shù)较M(fèi)者。這就是kafka快的秘訣。然而魚(yú)與熊掌不可兼得,速度和可靠性不可能同時(shí)滿足,需要根據(jù)實(shí)際業(yè)務(wù)情況在二者之間作出取舍。例如當(dāng)用kafka做日志聚合和網(wǎng)站用戶行為分析時(shí)速度要比可靠性重要,而在某些消息不允許丟失的場(chǎng)景,可靠性可能是首選。

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

2024-02-26 21:15:20

Kafka緩存參數(shù)

2024-11-26 08:52:34

SQL優(yōu)化Kafka

2020-02-27 15:44:41

Nginx服務(wù)器反向代理

2020-02-27 21:03:30

調(diào)度器架構(gòu)效率

2013-06-14 10:12:22

共享并行

2013-06-19 10:55:40

Disruptor并發(fā)框架

2013-06-17 14:41:10

Disruptor并發(fā)編程

2023-08-29 07:46:08

Redis數(shù)據(jù)ReHash

2020-10-15 09:19:36

Elasticsear查詢速度

2021-05-27 20:56:51

esbuild 工具JavaScript

2012-08-17 10:01:07

云計(jì)算

2024-09-14 09:41:17

2024-07-30 09:01:12

2020-10-13 17:54:18

開(kāi)發(fā)Kafka數(shù)據(jù)

2021-03-22 08:30:33

Kafka源碼架構(gòu)開(kāi)發(fā)技術(shù)

2013-06-18 10:30:45

Disruptor框架

2020-08-13 09:19:10

Kafka存儲(chǔ)MQ

2021-05-31 07:44:08

Kafka分布式系統(tǒng)

2023-03-21 08:02:36

Redis6.0IO多線程

2020-10-21 09:17:52

Redis面試內(nèi)存
點(diǎn)贊
收藏

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