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

Kafka為什么會這么快

大數據 Kafka
在系統設計中,會用到消息中間件來做服務異步化,系統解耦,或者是做流量削峰,常用的消息中間件有rabbitMq,activeMq以及阿里的RocketMq等等,都各自有各自的優勢,但是就吞吐量來說,kafka是其中的佼佼者。

在系統設計中,會用到消息中間件來做服務異步化,系統解耦,或者是做流量削峰,常用的消息中間件有rabbitMq,activeMq以及阿里的RocketMq等等,都各自有各自的優勢,但是就吞吐量來說,kafka是其中的佼佼者。在單機情況下,網友做的對比如下:

 

Kafka為什么會這么快
性能對比

為什么kafka會這么快呢?

發布訂閱模式

一個普通的發布訂閱模型如下圖所示:

 

Kafka為什么會這么快
發布訂閱模式

以kafka為例,生產者產生消息,并將消息Push到kafka集群,消費者主動去kafka集群Pull數據。這種模型有個好處,消費的速率完全由消費者控制,kafka集群類似于一個蓄水池,避免因生產者產生消息過快消費者來不及消費而導致消費者被壓垮的現象。

kafka為什么快要從兩方面分析,生產者產生的消息寫入集群時快和消費者消費消息時從集群讀取快。

寫入快

寫入快主要是兩方面原因:順序寫入和MMFile。

順序寫入

kafka將消息存儲在硬盤,通常認為硬盤的讀寫是比較慢,但是為什么kafka快呢?平時所說的磁盤讀寫慢是指隨機讀寫比較慢,因為磁盤每次隨機讀寫都要物理尋址,這是非常耗時的操作,順序讀寫的速度還是比較快的。如下圖所示:

 

Kafka為什么會這么快
順序寫入

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

當消費者消費時也是順序消費,每個消費者會有一個偏移量,記錄當前消費的消息的位置。如下圖所示:

 

Kafka為什么會這么快
順序消費

MMFile

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

 

Kafka為什么會這么快
write操作

數據會先從用戶空間拷貝到內核空間,然后再由內核空間寫入IO設備。而MMFile則省去了一次用數據從戶空間到內核空間復制的開銷。

讀取快

讀取快主要是因為零拷貝(Zero Copy)技術。上面介紹到數據從內存空間寫入磁盤的步驟,那么從磁盤讀取數據剛好相反,具體過程如下:

 

Kafka為什么會這么快
read操作

數據先從磁盤讀取到內核空間,然后再從內核空間復制到用戶空間,然后再到Socket,最后傳輸到消費者。

Linux提供了一種sendFile系統調用,可以將數據直接由磁盤拷貝到內核空間。省去了一次數據從用戶空間到內核空間的復制。這就是所謂的零拷貝技術。

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

批量數據壓縮

kafka不會對每個消息都做壓縮,而是對一批消息壓縮,然后將數據統一發送。將所有的消息變為一個批量文件,然后直接丟給消費者。

綜上所述,kafka通過MMFile技術快速將數據順序寫入磁盤,在讀取時通過零拷貝技術快速讀取,然后通過批量數據壓縮將數據傳輸到消費者。這就是kafka快的秘訣。然而魚與熊掌不可兼得,速度和可靠性不可能同時滿足,需要根據實際業務情況在二者之間作出取舍。例如當用kafka做日志聚合和網站用戶行為分析時速度要比可靠性重要,而在某些消息不允許丟失的場景,可靠性可能是首選。

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2024-02-26 21:15:20

Kafka緩存參數

2024-11-26 08:52:34

SQL優化Kafka

2020-02-27 15:44:41

Nginx服務器反向代理

2020-02-27 21:03:30

調度器架構效率

2013-06-14 10:12:22

共享并行

2013-06-19 10:55:40

Disruptor并發框架

2013-06-17 14:41:10

Disruptor并發編程

2021-05-27 20:56:51

esbuild 工具JavaScript

2023-08-29 07:46:08

Redis數據ReHash

2020-10-15 09:19:36

Elasticsear查詢速度

2012-08-17 10:01:07

云計算

2024-09-14 09:41:17

2024-07-30 09:01:12

2020-10-13 17:54:18

開發Kafka數據

2013-06-18 10:30:45

Disruptor框架

2021-03-22 08:30:33

Kafka源碼架構開發技術

2020-08-13 09:19:10

Kafka存儲MQ

2021-05-31 07:44:08

Kafka分布式系統

2023-03-21 08:02:36

Redis6.0IO多線程

2017-06-06 16:30:55

戴爾交付保障
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线欧美 | 久久精品国产亚洲一区二区三区 | www狠狠干| 国产午夜视频 | 精品一区二区在线观看 | 国产午夜三级一区二区三 | 一区二区三区四区视频 | 亚洲人a| 天堂一区在线 | 91小视频 | 97国产精品视频人人做人人爱 | 天天久久 | 欧产日产国产精品视频 | 欧美成年黄网站色视频 | 国产一区二区a | 精品亚洲一区二区三区 | 日韩精品激情 | 成人久久18免费网站麻豆 | 男人的天堂在线视频 | 黄色欧美大片 | 一区二区三区小视频 | 国产精品不卡一区 | 久久久久久久久久久久久九 | 视频一区二区在线 | 亚洲精品小视频在线观看 | 国产一区2区 | 大乳boobs巨大吃奶挤奶 | 鲁大师一区影视 | 欧美一二三 | 国产日韩欧美在线播放 | 日韩欧美在线一区 | 亚洲播放 | 欧美一二三四成人免费视频 | 狠狠久久 | 成人国产精品免费观看 | 亚洲精品一 | 日韩一区二区三区av | 欧美国产视频 | 伊人成人免费视频 | 国产精品一区二区视频 | 国产精品美女久久久久久免费 |