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

面試官:Kafka是如何實(shí)現(xiàn)百萬(wàn)級(jí)高吞吐量的?

云計(jì)算 Kafka
Kafka是一個(gè)非常優(yōu)秀的消息系統(tǒng),它提供了高吞吐量、低延遲和高可靠性等特性。通過(guò)使用批量發(fā)送與壓縮、優(yōu)秀的網(wǎng)絡(luò)模型、磁盤順序?qū)憽㈨?yè)緩存、分區(qū)并發(fā)、sendfile零拷貝等技術(shù),Kafka可實(shí)現(xiàn)百萬(wàn)級(jí)高吞吐量。

我們還是用一張圖先概括所有的要點(diǎn):

圖片圖片

批量發(fā)送與壓縮

Kafka發(fā)送消息時(shí),首先將消息進(jìn)行批量打包,然后壓縮后通過(guò)網(wǎng)絡(luò)傳輸,Producer可以通過(guò)GZIP或Snappy格式對(duì)消息集合進(jìn)行壓縮。這樣可以減少網(wǎng)絡(luò)傳輸?shù)拈_(kāi)銷,同時(shí)也可以利用壓縮算法來(lái)降低磁盤存儲(chǔ)的空間占用。

優(yōu)秀的網(wǎng)絡(luò)模型

Kafka使用了基于Java NIO的網(wǎng)絡(luò)框架,其實(shí)也是個(gè) reactor的模型。他的設(shè)計(jì)中,Accepter 作為一個(gè) main reactor,里面包含了 child reactor 即 processor,然后發(fā)送和接收都是通過(guò)隊(duì)列的方式異步進(jìn)行[1]。

圖片圖片

磁盤順序?qū)?/h3>

與隨機(jī)訪問(wèn)相比,磁盤上的順序?qū)懖僮饕斓枚唷afka將每個(gè)分區(qū)的日志作為一系列連續(xù)的文件段進(jìn)行管理,并且總是追加到當(dāng)前活動(dòng)的日志文件末尾。

頁(yè)緩存技術(shù)(MMAP內(nèi)存映射)

即便是順序?qū)懭胗脖P,硬盤的訪問(wèn)速度還是不可能追上內(nèi)存。所以 Kafka 的數(shù)據(jù)并不是實(shí)時(shí)的寫入硬盤 ,它充分利用了現(xiàn)代操作系統(tǒng)頁(yè)緩存來(lái)利用內(nèi)存提高 I/O 效率。kafka在寫數(shù)據(jù)的時(shí)候,會(huì)先將數(shù)據(jù)寫入到頁(yè)緩存,滿足一定條件后刷寫到磁盤上,可以保證更高的讀寫性能。

操作系統(tǒng)本身有一層緩存,叫做page cache,是在內(nèi)存里的緩存,我們也可以稱之為os cache,意思就是操作系統(tǒng)自己管理的緩存。你在寫入磁盤文件的時(shí)候,可以直接寫入這個(gè)os cache里,也就是僅僅寫入內(nèi)存中,接下來(lái)由操作系統(tǒng)自己決定什么時(shí)候把os cache里的數(shù)據(jù)真的刷入磁盤文件中[2]。

圖片

MMAP將磁盤文件映射到內(nèi)存,用戶通過(guò)修改內(nèi)存就能修改磁盤文件。通過(guò)MMAP,進(jìn)程像讀寫硬盤一樣讀寫內(nèi)存(當(dāng)然是虛擬機(jī)內(nèi)存)。使用這種方式可以獲取很大的 I/O 提升,省去了用戶空間到內(nèi)核空間復(fù)制的開(kāi)銷。

分區(qū)并發(fā)

Kafka的分區(qū)機(jī)制可以實(shí)現(xiàn)高并發(fā)的數(shù)據(jù)消費(fèi)。Kafka中的topic中的內(nèi)容可以分在多個(gè)分區(qū)(partition)存儲(chǔ),每個(gè)partition又分為多個(gè)段segment,所以每次操作都是針對(duì)一小部分做操作,很輕便,并且增加并行操作的能力,每個(gè)分區(qū)都是獨(dú)立的、有序的消息隊(duì)列。

消費(fèi)者組內(nèi)的不同成員可以并行地消費(fèi)不同的分區(qū),從而實(shí)現(xiàn)了水平擴(kuò)展性和更高的并發(fā)度。這種設(shè)計(jì)使得Kafka能夠很好地支持大規(guī)模的消息處理場(chǎng)景。

Sendfile零拷貝

當(dāng)客戶端請(qǐng)求讀取數(shù)據(jù)時(shí),Kafka可以利用操作系統(tǒng)級(jí)別的零拷貝特性直接將數(shù)據(jù)從磁盤傳輸給網(wǎng)絡(luò)接口,而不需要經(jīng)過(guò)應(yīng)用程序緩沖區(qū),這樣就減少了不必要的數(shù)據(jù)復(fù)制過(guò)程。Kafka 使用到了 mmap 和 sendfile 的方式來(lái)實(shí)現(xiàn)零拷貝。分別對(duì)應(yīng) Java 的 MappedByteBuffer 和 FileChannel.transferTo。如下圖[4]:

圖片圖片

結(jié)語(yǔ)

Kafka是一個(gè)非常優(yōu)秀的消息系統(tǒng),它提供了高吞吐量、低延遲和高可靠性等特性。通過(guò)使用批量發(fā)送與壓縮、優(yōu)秀的網(wǎng)絡(luò)模型、磁盤順序?qū)憽㈨?yè)緩存、分區(qū)并發(fā)、sendfile零拷貝等技術(shù),Kafka可實(shí)現(xiàn)百萬(wàn)級(jí)高吞吐量。

參考:

[1] https://juejin.cn/post/7276814487054532645

[2] https://blog.csdn.net/CSDN2497242041/article/details/120458401

[3] https://www.jianshu.com/p/53b8ec516a0b

[4] https://mp.weixin.qq.com/s/MLQzOv2lFV_NL1tm5rAZ-w

[5] https://mp.weixin.qq.com/s/iJJvgmwob9Ci6zqYGwpKtw

[6] https://developer.aliyun.com/article/939817

責(zé)任編輯:武曉燕 來(lái)源: 程序員Aike
相關(guān)推薦

2024-05-23 16:41:40

2025-05-26 02:11:00

2023-11-07 15:11:46

Kafka技巧

2023-08-03 14:18:29

Rust阻塞函數(shù)

2024-12-25 15:44:15

2024-02-04 10:08:34

2019-07-26 15:41:27

程序員技能開(kāi)發(fā)者

2025-03-10 11:48:22

項(xiàng)目服務(wù)設(shè)計(jì)

2024-10-15 10:00:06

2025-02-26 12:19:52

2021-09-27 07:11:18

MySQLACID特性

2025-03-04 08:52:21

2025-06-13 09:12:28

2024-02-28 10:14:47

Redis數(shù)據(jù)硬盤

2024-09-11 22:51:19

線程通訊Object

2023-11-20 10:09:59

2024-09-12 15:24:29

2019-06-06 10:55:02

JDK高并發(fā)框架

2024-02-20 14:10:55

系統(tǒng)緩存冗余

2015-08-13 10:29:12

面試面試官
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 免费激情 | 免费v片在线观看 | 亚洲91视频 | 国产网站在线播放 | 喷潮网站 | 精品视频一区二区三区在线观看 | 久久免费观看视频 | 日韩中文一区二区 | 999久久| 日韩欧美一区二区在线播放 | 性一交一乱一透一a级 | 四虎影院一区二区 | 久久乐国产精品 | 毛片一区二区三区 | av免费网址 | 精品一二区| 亚洲欧美在线免费观看 | 亚洲激情av | 91在线精品一区二区 | www.久久久.com | 亚洲精品国产电影 | 一区二区三区av夏目彩春 | 亚洲一区三区在线观看 | 日韩欧美国产成人一区二区 | 日本黄色的视频 | 亚洲视频欧美视频 | 欧美啪啪网站 | 我要看免费一级毛片 | 一区二区三区亚洲精品国 | 国产精品视频免费观看 | 国产欧美精品区一区二区三区 | 97精品超碰一区二区三区 | 国产二区在线播放 | 亚洲天堂精品一区 | 国产一区二区电影 | 成人一区二区电影 | 密桃av | 国产精品毛片 | 亚洲精品免费视频 | 91大神在线资源观看无广告 | 欧美日韩在线一区二区 |