新聞中心
互聯(lián)網(wǎng)企業(yè)都在用的Kafka為什么可以這么快?
作者:AI課工場 2020-10-13 17:54:18
大數(shù)據(jù)
Kafka 在數(shù)據(jù)為王的時代,對于海量數(shù)據(jù)的存儲、傳輸、分析變得尤為重要。在數(shù)據(jù)的存儲上有clickhouse、Hbase等大數(shù)據(jù)庫來完成,在數(shù)據(jù)的分析上一般也是借助clickhouse或hbase的特性將數(shù)據(jù)分維度進行,而在數(shù)據(jù)的傳輸上,大家都不約而同使用了Kafka。

站在用戶的角度思考問題,與客戶深入溝通,找到錫林浩特網(wǎng)站設(shè)計與錫林浩特網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋錫林浩特地區(qū)。
在數(shù)據(jù)為王的時代,對于海量數(shù)據(jù)的存儲、傳輸、分析變得尤為重要。在數(shù)據(jù)的存儲上有clickhouse、Hbase等大數(shù)據(jù)庫來完成,在數(shù)據(jù)的分析上一般也是借助clickhouse或hbase的特性將數(shù)據(jù)分維度進行,而在數(shù)據(jù)的傳輸上,大家都不約而同使用了Kafka。高并發(fā)、高性能、快速成為了Kafka的代名詞。
Kafka+clickhouse+zookeeper成為了大數(shù)據(jù)分析處理行業(yè)的三件套,不過今天我們只聊Kafka,你所知道的一線大廠,如阿里、百度、騰訊、頭條、美團、滴滴等,均在Kafka上做了二次開發(fā),集合業(yè)務(wù)擴展了它的能力,你所不知道的互聯(lián)網(wǎng)企業(yè)則利用了Kafka的原生能力來輔助做業(yè)務(wù)處理。那么Kafka為什么可以做到這么快呢?今天我們就來聊一聊。
在第一點便是Kafka的特性,使用partition分區(qū)來做并行處理。Kafka作為一個發(fā)布-訂閱系統(tǒng),它所操作的最小單元便是topic主題消息,而每一個topic可以劃分為多個partition。不同partition一般位于不同的機器中,利用集群的優(yōu)勢就可以實現(xiàn)機器間的并行處理。另外因為一個partition在機器上對應(yīng)一個文件夾,即使存在多個partition位于同一個機器節(jié)點,也可以配置同一個機器節(jié)點的partition處于不同的磁盤,實現(xiàn)磁盤間的并行處理,提高速度。
第二點便是順序?qū)懭氪疟P,我們知道Kafka數(shù)據(jù)是存儲在磁盤上的,磁盤讀取數(shù)據(jù)的時間主要由尋道時間(正確的找到磁道)、旋轉(zhuǎn)延遲(讀寫磁頭旋轉(zhuǎn))、數(shù)據(jù)傳輸時間組成。如果磁盤是順序讀寫數(shù)據(jù),磁頭只要找到正確的磁道就可以不斷的旋轉(zhuǎn)獲取數(shù)據(jù)了,而如果磁盤是隨機讀寫數(shù)據(jù),最差的情況每一份數(shù)據(jù)都在不同的磁道上,那么就需要每次尋道、旋轉(zhuǎn)磁頭,非常的耗時,性能也很差。在Kafka中每個分區(qū)的數(shù)據(jù)是有序的、不可變的消息隊列,新的消息來到分區(qū)就會追加在最末尾,順序?qū)懙姆绞骄吞岣吡怂俣取.斘覀円h除數(shù)據(jù)的時候,也是通過把partition分為多個segment,直接刪除segment即可,也是非常的快。
第三點是利用pagecache。我們知道Kafka一般都是裝在Linux系統(tǒng)使用的,在Linux系統(tǒng)的設(shè)計中,為了提高對磁盤訪問的性能,將文件的cache分為pagecache、buffercache兩部分,在pagecache模塊緩存文件系統(tǒng)的數(shù)據(jù),支持進程對文件的讀寫,在buffercache緩存塊數(shù)據(jù),支持系統(tǒng)對塊設(shè)備的讀寫。在Kafka中,服務(wù)器節(jié)點broker收到數(shù)據(jù)后,在寫磁盤時把數(shù)據(jù)寫入pagecache,把連續(xù)的小塊組裝成大塊的物理寫提高了性能,在讀磁盤數(shù)據(jù)時從pagecache讀,不通過物理磁盤獲取,提高了速度。
第四點是Kafka的零拷貝機制。我們知道操作系統(tǒng)的核心是內(nèi)核,為了避免用戶直接操作內(nèi)核,操作系統(tǒng)一般把內(nèi)核劃分成兩部分,即內(nèi)核空間、用戶空間。在Linux系統(tǒng)中,讀取數(shù)據(jù)操作都是基于數(shù)據(jù)拷貝完成的,也就是說數(shù)據(jù)會在內(nèi)核地址空間的緩沖區(qū)和用戶地址空間的緩沖區(qū)進行拷貝,正常的數(shù)據(jù)讀取流程一般包含四部分。
1、操作系統(tǒng)需要先從磁盤里讀取文件到內(nèi)核頁面的緩存;
2、用戶態(tài)的應(yīng)用程序從內(nèi)核態(tài)讀取數(shù)據(jù)到用戶空間緩存區(qū),由于內(nèi)核態(tài)的資源比較寶貴會經(jīng)常釋放;
3、用戶態(tài)的應(yīng)用程序還需要將數(shù)據(jù)寫回內(nèi)核空間并放入socket緩沖區(qū);
4、最后操作系統(tǒng)將數(shù)據(jù)從socket緩沖區(qū)復制到網(wǎng)卡接口,再經(jīng)由網(wǎng)絡(luò)發(fā)送給到消費者進程。
在消費者consumer讀取Kafka消息隊列的數(shù)據(jù)時,按理說也要經(jīng)過這四次copydata的流程,但是Kafka內(nèi)置了零拷貝技術(shù),將磁盤文件的數(shù)據(jù)復制到頁面緩存中,然后將數(shù)據(jù)從頁面緩存直接發(fā)送到網(wǎng)絡(luò)給到不同的訂閱者,避免了重復拷貝操作,極大的提高了速度。
第五點是壓縮批處理。在Kafka的producer往broker服務(wù)器節(jié)點發(fā)送數(shù)據(jù)時,會累積多條消息壓縮后一起發(fā)送,通過批處理和壓縮的方式提高了速度,也提高了網(wǎng)絡(luò)帶寬使用率。
通過本文的介紹,你對Kafka的速度了解了嗎?在日常技術(shù)開發(fā)或者業(yè)務(wù)選型當中,Kafka無疑都是你最好的選擇噢。在金九銀十的面試中,如果面試官問你用什么消息隊列或者你對消息隊列有什么了解時,把這些知識點咔咔講出來,直接讓面試官眼前一亮,最佳候選人說不定就是你了~加油鴨!
當前標題:互聯(lián)網(wǎng)企業(yè)都在用的Kafka為什么可以這么快?
本文路徑:http://www.dlmjj.cn/article/cdjejog.html


咨詢
建站咨詢
