摘要:是分布式消息系統(tǒng),需要處理海量的消息,的設(shè)計(jì)是把所有的消息都寫入速度低容量大的硬盤,以此來換取更強(qiáng)的存儲(chǔ)能力,但實(shí)際上,使用硬盤并沒有帶來過多的性能損失主要使用了以下幾個(gè)方式實(shí)現(xiàn)了超高的吞吐率順序讀寫的消息是不斷追加到文件中的,這個(gè)特性使可
Kafka是分布式消息系統(tǒng),需要處理海量的消息,Kafka的設(shè)計(jì)是把所有的消息都寫入速度低容量大的硬盤,以此來換取更強(qiáng)的存儲(chǔ)能力,但實(shí)際上,使用硬盤并沒有帶來過多的性能損失
kafka主要使用了以下幾個(gè)方式實(shí)現(xiàn)了超高的吞吐率
順序讀寫
kafka的消息是不斷追加到文件中的,這個(gè)特性使kafka可以充分利用磁盤的順序讀寫性能
順序讀寫不需要硬盤磁頭的尋道時(shí)間,只需很少的扇區(qū)旋轉(zhuǎn)時(shí)間,所以速度遠(yuǎn)快于隨機(jī)讀寫
Kafka官方給出了測試數(shù)據(jù)(Raid-5,7200rpm):
順序 I/O: 600MB/s
隨機(jī) I/O: 100KB/s
零拷貝
先簡單了解下文件系統(tǒng)的操作流程,例如一個(gè)程序要把文件內(nèi)容發(fā)送到網(wǎng)絡(luò)
這個(gè)程序是工作在用戶空間,文件和網(wǎng)絡(luò)socket屬于硬件資源,兩者之間有一個(gè)內(nèi)核空間
在操作系統(tǒng)內(nèi)部,整個(gè)過程為:
在Linux kernel2.2 之后出現(xiàn)了一種叫做"零拷貝(zero-copy)"系統(tǒng)調(diào)用機(jī)制,就是跳過“用戶緩沖區(qū)”的拷貝,建立一個(gè)磁盤空間和內(nèi)存的直接映射,數(shù)據(jù)不再復(fù)制到“用戶態(tài)緩沖區(qū)”
系統(tǒng)上下文切換減少為2次,可以提升一倍的性能
文件分段
kafka的隊(duì)列topic被分為了多個(gè)區(qū)partition,每個(gè)partition又分為多個(gè)段segment,所以一個(gè)隊(duì)列中的消息實(shí)際上是保存在N多個(gè)片段文件中
通過分段的方式,每次文件操作都是對一個(gè)小文件的操作,非常輕便,同時(shí)也增加了并行處理能力
批量發(fā)送
Kafka允許進(jìn)行批量發(fā)送消息,先將消息緩存在內(nèi)存中,然后一次請求批量發(fā)送出去
比如可以指定緩存的消息達(dá)到某個(gè)量的時(shí)候就發(fā)出去,或者緩存了固定的時(shí)間后就發(fā)送出去
如100條消息就發(fā)送,或者每5秒發(fā)送一次
這種策略將大大減少服務(wù)端的I/O次數(shù)
數(shù)據(jù)壓縮
Kafka還支持對消息集合進(jìn)行壓縮,Producer可以通過GZIP或Snappy格式對消息集合進(jìn)行壓縮
壓縮的好處就是減少傳輸?shù)臄?shù)據(jù)量,減輕對網(wǎng)絡(luò)傳輸?shù)膲毫?/p>
Producer壓縮之后,在Consumer需進(jìn)行解壓,雖然增加了CPU的工作,但在對大數(shù)據(jù)處理上,瓶頸在網(wǎng)絡(luò)上而不是CPU,所以這個(gè)成本很值得
歡迎加入本站公開興趣群軟件開發(fā)技術(shù)群
興趣范圍包括:Java,C/C++,Python,PHP,Ruby,shell等各種語言開發(fā)經(jīng)驗(yàn)交流,各種框架使用,外包項(xiàng)目機(jī)會(huì),學(xué)習(xí)、培訓(xùn)、跳槽等交流
QQ群:26931708
Hadoop源代碼研究群
興趣范圍包括:Hadoop源代碼解讀,改進(jìn),優(yōu)化,分布式系統(tǒng)場景定制,與Hadoop有關(guān)的各種開源項(xiàng)目,總之就是玩轉(zhuǎn)Hadoop
QQ群:288410967?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/4190.html
摘要:例如,在的生產(chǎn)環(huán)境中,群集每秒能夠處理超過萬條消息,而且其數(shù)據(jù)聚合率接近。為高吞吐量的,調(diào)優(yōu)緩沖區(qū)的大小特別是和以字節(jié)為單位。 來源:51CTO技術(shù)棧(ID:blog51cto) Apache Kafka是一款流行的分布式數(shù)據(jù)流平臺(tái),它已經(jīng)廣泛地被諸如New Relic(數(shù)據(jù)智能平臺(tái))、Uber、Square(移動(dòng)支付公司)等大型公司用來構(gòu)建可擴(kuò)展的、高吞吐量的、高可靠的實(shí)時(shí)數(shù)據(jù)流系統(tǒng)...
摘要:數(shù)量對吞吐量的影響可以達(dá)到幾百幾千個(gè)的級別,吞吐量會(huì)有小幅度的下降。這是的一大優(yōu)勢,可在同等數(shù)量機(jī)器下支撐大量的從幾十個(gè)到幾百個(gè)的時(shí)候,吞吐量會(huì)大幅下降。下一篇如何保證消息隊(duì)列的高可用 1.為什么使用消息隊(duì)列? (1)解耦:可以在多個(gè)系統(tǒng)之間進(jìn)行解耦,將原本通過網(wǎng)絡(luò)之間的調(diào)用的方式改為使用MQ進(jìn)行消息的異步通訊,只要該操作不是需要同步的,就可以改為使用MQ進(jìn)行不同系統(tǒng)之間的聯(lián)系,這樣項(xiàng)目之間...
摘要:我在前面的文章中也提到了應(yīng)該怎么做自我介紹與項(xiàng)目介紹,詳情可以查看這篇文章備戰(zhàn)春招秋招系列初出茅廬的程序員該如何準(zhǔn)備面試。因此基于事件消息對象驅(qū)動(dòng)的業(yè)務(wù)架構(gòu)可以是一系列流程。 showImg(https://user-gold-cdn.xitu.io/2018/11/14/16711ac29c2ae52c?w=928&h=531&f=png&s=798562); 一 消息隊(duì)列MQ的...
摘要:主流消息中間件介紹是由出品,是一個(gè)完全支持和規(guī)范的實(shí)現(xiàn)。主流消息中間件介紹是阿里開源的消息中間件,目前也已經(jīng)孵化為頂級項(xiàng)目。 showImg(https://img-blog.csdnimg.cn/20190509221741422.gif);showImg(https://img-blog.csdnimg.cn/20190718204938932.png?x-oss-process=...
閱讀 1228·2023-04-25 20:31
閱讀 3734·2021-10-14 09:42
閱讀 1504·2021-09-22 16:06
閱讀 2689·2021-09-10 10:50
閱讀 3542·2021-09-07 10:19
閱讀 1786·2019-08-30 15:53
閱讀 1184·2019-08-29 15:13
閱讀 2830·2019-08-29 13:20