|
1、 概述
Kafka是Linkedin于2010年12月份開(kāi)源的消息系統(tǒng),它主要用于處理活躍的流式數(shù)據(jù)?;钴S的流式數(shù)據(jù)在web網(wǎng)站應(yīng)用中非常常見(jiàn),這些數(shù)據(jù)包括網(wǎng)站的pv、用戶訪問(wèn)了什么內(nèi)容,搜索了什么內(nèi)容等。 這些數(shù)據(jù)通常以日志的形式記錄下來(lái),然后每隔一段時(shí)間進(jìn)行一次統(tǒng)計(jì)處理。 傳統(tǒng)的日志分析系統(tǒng)提供了一種離線處理日志信息的可擴(kuò)展方案,但若要進(jìn)行實(shí)時(shí)處理,通常會(huì)有較大延遲。而現(xiàn)有的消(隊(duì)列)系統(tǒng)能夠很好的處理實(shí)時(shí)或者近似實(shí)時(shí)的應(yīng)用,但未處理的數(shù)據(jù)通常不會(huì)寫(xiě)到磁盤(pán)上,這對(duì)于Hadoop之類(一小時(shí)或者一天只處理一部分?jǐn)?shù)據(jù))的離線應(yīng)用而言,可能存在問(wèn)題。Kafka正是為了解決以上問(wèn)題而設(shè)計(jì)的,它能夠很好地離線和在線應(yīng)用。 2、 設(shè)計(jì)目標(biāo) (1)數(shù)據(jù)在磁盤(pán)上存取代價(jià)為O(1)。一般數(shù)據(jù)在磁盤(pán)上是使用BTree存儲(chǔ)的,存取代價(jià)為O(lgn)。 (2)高吞吐率。即使在普通的節(jié)點(diǎn)上每秒鐘也能處理成百上千的message。 (3)顯式分布式,即所有的producer、broker和consumer都會(huì)有多個(gè),均為分布式的。 (4)支持?jǐn)?shù)據(jù)并行加載到Hadoop中。 3、 KafKa部署結(jié)構(gòu)
kafka是顯式分布式架構(gòu),producer、broker(Kafka)和consumer都可以有多個(gè)。Kafka的作用類似于緩存,即活躍的數(shù)據(jù)和離線處理系統(tǒng)之間的緩存。幾個(gè)基本概念: (1)message(消息)是通信的基本單位,每個(gè)producer可以向一個(gè)topic(主題)發(fā)布一些消息。如果consumer訂閱了這個(gè)主題,那么新發(fā)布的消息就會(huì)廣播給這些consumer。 (2)Kafka是顯式分布式的,多個(gè)producer、consumer和broker可以運(yùn)行在一個(gè)大的集群上,作為一個(gè)邏輯整體對(duì)外提供服務(wù)。對(duì)于consumer,多個(gè)consumer可以組成一個(gè)group,這個(gè)message只能傳輸給某個(gè)group中的某一個(gè)consumer. 4、 KafKa關(guān)鍵技術(shù)點(diǎn) (1) zero-copy 在Kafka上,有兩個(gè)原因可能導(dǎo)致低效:1)太多的網(wǎng)絡(luò)請(qǐng)求 2)過(guò)多的字節(jié)拷貝。為了提高效率,Kafka把message分成一組一組的,每次請(qǐng)求會(huì)把一組message發(fā)給相應(yīng)的consumer。 此外, 為了減少字節(jié)拷貝,采用了sendfile系統(tǒng)調(diào)用。為了理解sendfile原理,先說(shuō)一下傳統(tǒng)的利用socket發(fā)送文件要進(jìn)行拷貝: Sendfile系統(tǒng)調(diào)用: (2) Exactly once message transfer 怎樣記錄每個(gè)consumer處理的信息的狀態(tài)?在Kafka中僅保存了每個(gè)consumer已經(jīng)處理數(shù)據(jù)的offset。這樣有兩個(gè)好處:1)保存的數(shù)據(jù)量少 2)當(dāng)consumer出錯(cuò)時(shí),重新啟動(dòng)consumer處理數(shù)據(jù)時(shí),只需從最近的offset開(kāi)始處理數(shù)據(jù)即可。 (3)Push/pull Producer 向Kafka(push)推數(shù)據(jù),consumer 從kafka 拉(pull)數(shù)據(jù)。 (4)負(fù)載均衡和容錯(cuò) Producer和broker之間沒(méi)有負(fù)載均衡機(jī)制。 【參考資料】 【1】Kafka主頁(yè):http:///kafka/design.php 【2】Zero-copy原理:https://www.ibm.com/developerworks/linux/library/j-zerocopy/ 【3】Kafka與Hadoop:http:///sna/media/kafka_hadoop.pdf |
|
|
來(lái)自: 咖啡貓來(lái)啦 > 《性能測(cè)試資料》