成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

字節(jié)一面:Kafka為什么這么快?

云計算 Kafka
生產(chǎn)者在發(fā)送消息到Kafka集群之前,可以對消息進行壓縮。這種在生產(chǎn)者端進行壓縮的方式能夠減少發(fā)送到Kafka集群的數(shù)據(jù)量,從而降低網(wǎng)絡傳輸?shù)膸捪模⑻岣邤?shù)據(jù)傳輸?shù)男省?/div>

前言

大家好,我是田螺。

有位粉絲去字節(jié)面試。問了一道很經(jīng)典的八股文:kafka為什么這么快?

其實這不就送分題嘛,哈哈~~ 我梳理了田螺版的答案:

  • 批量處理思想
  • 磁盤順序讀寫
  • 零拷貝技術(shù)
  • 頁緩存加速消息讀寫
  • 分區(qū)與并行處理
  • 數(shù)據(jù)壓縮

1.批量處理思想

之前寫SQL優(yōu)化技巧的時候,就提到批量更新SQL~~

假如你需要搬一萬塊磚到樓頂,你有一個電梯,電梯一次可以放適量的磚(最多放500),你可以選擇一次運送一塊磚,也可以一次運送500,你覺得哪個時間消耗大?

kafka為什么這么快,就是使用了批量操作思想。

Kafka支持批量發(fā)送和接收消息。生產(chǎn)者可以將多個消息打包成一個批次發(fā)送,消費者也可以一次性獲取多個消息進行處理。這樣可以減少網(wǎng)絡開銷和磁盤I/O次數(shù),提高性能。

  • Kafka生產(chǎn)者send()方法看似單條發(fā)送,實則內(nèi)部批量處理。消息先緩存,待數(shù)量足夠或某個時間間隔,Kafka客戶端將其打包成批次,一并發(fā)送給Broker。。
  • Broker服務端Kafka不會將消息分批后逐條處理,因其效率低下。Kafka智能地以批為單位處理消息,整個Broker處理流程(寫入、讀取、復制),批消息均保持原狀不被拆分。
  • 消費者從Broker拉取一批消息后,在客戶端拆分這批消息,再逐條交給用戶代碼處理。

2. 磁盤順序讀寫

Kafka大量使用磁盤進行數(shù)據(jù)存儲,并采用順序?qū)懭氲姆绞健m樞驅(qū)懭氪疟P的速度遠遠高于隨機寫入,因為磁盤的物理結(jié)構(gòu)決定了順序?qū)懭肟梢詼p少磁頭的尋道時間,從而提高寫入速度。

kafka是如何使用順序讀寫提升磁盤IO性能的?

每個分區(qū)接收到的Producer消息,均按順序被寫入對應的日志文件中,當文件寫滿后,則開啟新文件進行后續(xù)寫入。在消費環(huán)節(jié),從全局指定位置(即特定日志文件的特定偏移處)起,消息被順序讀取。

3. 零拷貝技術(shù)

Kafka使用零拷貝技術(shù)將數(shù)據(jù)從磁盤直接發(fā)送到網(wǎng)絡,避免了在內(nèi)核空間和用戶空間之間的多次數(shù)據(jù)拷貝。

傳統(tǒng)的文件傳輸方式通常需要將數(shù)據(jù)從磁盤讀取到內(nèi)核緩沖區(qū),然后再從內(nèi)核緩沖區(qū)拷貝到用戶空間,最后從用戶空間拷貝到網(wǎng)絡緩沖區(qū)發(fā)送出去。而零拷貝技術(shù)可以直接將數(shù)據(jù)從磁盤的文件描述符傳遞給網(wǎng)絡接口,減少了數(shù)據(jù)拷貝的次數(shù)和開銷。

傳統(tǒng)的IO流程:

圖片圖片

  • 用戶應用進程調(diào)用read函數(shù),向操作系統(tǒng)發(fā)起IO調(diào)用,上下文從用戶態(tài)轉(zhuǎn)為內(nèi)核態(tài)(切換1)
  • DMA控制器把數(shù)據(jù)從磁盤中,讀取到內(nèi)核緩沖區(qū)。
  • CPU把內(nèi)核緩沖區(qū)數(shù)據(jù),拷貝到用戶應用緩沖區(qū),上下文從內(nèi)核態(tài)轉(zhuǎn)為用戶態(tài)(切換2),read函數(shù)返回
  • 用戶應用進程通過write函數(shù),發(fā)起IO調(diào)用,上下文從用戶態(tài)轉(zhuǎn)為內(nèi)核態(tài)(切換3)
  • CPU將用戶緩沖區(qū)中的數(shù)據(jù),拷貝到socket緩沖區(qū)
  • DMA控制器把數(shù)據(jù)從socket緩沖區(qū),拷貝到網(wǎng)卡設備,上下文從內(nèi)核態(tài)切換回用戶態(tài)(切換4),write函數(shù)返回

sendfile+DMA scatter/gather實現(xiàn)的零拷貝流程如下:

圖片圖片

  • 用戶進程發(fā)起sendfile系統(tǒng)調(diào)用,上下文(切換1)從用戶態(tài)轉(zhuǎn)向內(nèi)核態(tài)
  • DMA控制器,把數(shù)據(jù)從硬盤中拷貝到內(nèi)核緩沖區(qū)。
  • CPU把內(nèi)核緩沖區(qū)中的文件描述符信息(包括內(nèi)核緩沖區(qū)的內(nèi)存地址和偏移量)發(fā)送到socket緩沖區(qū)
  • DMA控制器根據(jù)文件描述符信息,直接把數(shù)據(jù)從內(nèi)核緩沖區(qū)拷貝到網(wǎng)卡
  • 上下文(切換2)從內(nèi)核態(tài)切換回用戶態(tài),sendfile調(diào)用返回。

零拷貝的實現(xiàn)方式,大家可以看看我的這篇文章哈:看一遍就理解:零拷貝詳解

Kafka 在處理大規(guī)模數(shù)據(jù)傳輸和存儲時,采用了幾種高效的零拷貝技術(shù),主要包括:

  • sendfile:用于減少文件讀取和網(wǎng)絡傳輸中的內(nèi)存拷貝,提高消息傳輸效率。
  • DMA(硬件加速):在高性能硬件環(huán)境下,Kafka 可通過硬件支持的 DMA 技術(shù)來加速數(shù)據(jù)傳輸。

4.頁緩存加速消息讀寫

Kafka利用PageCache(操作系統(tǒng)內(nèi)存中的磁盤文件緩存)來加速消息的讀寫。

當應用程序讀寫文件時,實際上操作的是PageCache中的副本。寫入時,數(shù)據(jù)先寫入PageCache,再批量寫到磁盤;讀取時,若PageCache中有數(shù)據(jù)則直接讀取,否則操作系統(tǒng)會從磁盤加載數(shù)據(jù)到PageCache。Kafka讀寫消息時充分利用這一特性,由于消息通常很快被消費,按LRU策略,PageCache命中率高。這既提高了讀取速度,又為寫入讓出了磁盤IO資源,間接提升了寫入性能。

5. 分區(qū)與并行處理

Kafka的主題(Topic)可以被分成多個分區(qū)(Partition),每個分區(qū)可以分布在不同的服務器上。這樣可以實現(xiàn)并行寫入和讀取,提高了吞吐量。

其實以前寫接口優(yōu)化的時候,就提到并行優(yōu)化的方式,思想道理其實是一樣的:

比如一個查詢APP首頁查詢接口:查用戶信息、查banner信息、查彈窗信息是串行的:

圖片圖片

如果修改為并行,接口耗時將大大降低。

圖片圖片

6. 數(shù)據(jù)壓縮

生產(chǎn)者在發(fā)送消息到Kafka集群之前,可以對消息進行壓縮。這種在生產(chǎn)者端進行壓縮的方式能夠減少發(fā)送到Kafka集群的數(shù)據(jù)量,從而降低網(wǎng)絡傳輸?shù)膸捪模⑻岣邤?shù)據(jù)傳輸?shù)男省?/p>

壓縮傳輸內(nèi)容,傳輸報文變得更小,因此傳輸會更快啦。10M帶寬,傳輸10k的報文,一般比傳輸1M的會快呀。


責任編輯:武曉燕 來源: 撿田螺的小男孩
相關(guān)推薦

2024-02-26 21:15:20

Kafka緩存參數(shù)

2020-03-30 15:05:46

Kafka消息數(shù)據(jù)

2020-02-27 21:03:30

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

2020-02-27 15:44:41

Nginx服務器反向代理

2022-03-30 10:10:17

字節(jié)碼棧空間

2022-01-04 08:54:32

Redis數(shù)據(jù)庫數(shù)據(jù)類型

2024-09-26 06:48:36

2021-05-27 20:56:51

esbuild 工具JavaScript

2023-08-29 07:46:08

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

2020-10-15 09:19:36

Elasticsear查詢速度

2022-10-10 08:13:16

遞歸通用代碼

2024-09-19 08:51:01

HTTP解密截取

2022-08-13 12:07:14

URLHTTP加密

2020-10-13 17:54:18

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

2024-09-14 09:41:17

2024-07-30 09:01:12

2024-09-04 15:17:23

2021-03-22 08:30:33

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

2021-05-31 07:44:08

Kafka分布式系統(tǒng)

2022-05-10 22:00:41

UDPTCP協(xié)議
點贊
收藏

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

主站蜘蛛池模板: 91影院| 国产日韩精品一区二区三区 | 免费在线国产视频 | 中文字幕久久久 | 视频一区在线观看 | 黄网站色大毛片 | 欧美久久久久 | 久久亚洲天堂 | 免费黄色日本 | 国产性网 | 日韩精品一区二区三区在线观看 | 久久久久久久久国产精品 | 日韩在线不卡 | 久久国产精品无码网站 | 国产9久| 国内自拍偷拍一区 | 一级黄色片在线看 | 高清欧美性猛交xxxx黑人猛交 | 精品国产乱码久久久久久老虎 | 日韩一区二区三区视频 | 亚洲一区综合 | 久久成人一区二区三区 | 国产精品日韩在线观看一区二区 | 亚洲一区二区三区免费在线观看 | 福利片在线| 国内自拍真实伦在线观看 | 久久久精品在线 | 日本一区二区三区视频在线 | 久久亚洲欧美日韩精品专区 | 国产精品一区二区三区四区 | 成人精品鲁一区一区二区 | 羞羞的视频免费看 | 91精品综合久久久久久五月天 | 欧美 日韩 中文 | 国产成人99久久亚洲综合精品 | 婷婷色国产偷v国产偷v小说 | 欧美日韩综合视频 | 羞羞的视频在线观看 | 欧美激情国产日韩精品一区18 | 欧美激情综合色综合啪啪五月 | 日韩欧美三级电影在线观看 |