新聞中心
高速數(shù)據(jù)總線Kafka介紹
作者:朱潔 2017-07-02 13:43:42
云計算
Kafka 本文主要介紹高速數(shù)據(jù)總線kafka,下面,我們就從Kafka的作用、產(chǎn)生背景以及架構(gòu)等方面來詳細(xì)講解。

為南豐等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及南豐網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為做網(wǎng)站、成都做網(wǎng)站、南豐網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
1. Kafka的作用
在大數(shù)據(jù)系統(tǒng)中,常常會碰到一個問題,整個大數(shù)據(jù)是由各個子系統(tǒng)組成,數(shù)據(jù)需要在各個子系統(tǒng)中高性能,低延遲的不停流轉(zhuǎn)。有沒有一個系統(tǒng)可以同時搞定在線應(yīng)用(消息)和離線應(yīng)用(數(shù)據(jù)文件,日志)?這就需要kafka。Kafka可以起到兩個作用:
- 降低系統(tǒng)組網(wǎng)復(fù)雜度。
- 降低編程復(fù)雜度,各個子系統(tǒng)不在是相互協(xié)商接口,各個子系統(tǒng)類似插口插在插座上,Kafka承擔(dān)高速數(shù)據(jù)總線的作用。
2. Kafka產(chǎn)生背景
Kafka是Linkedin于2010年12月份開源的消息系統(tǒng),它主要用于處理活躍的流式數(shù)據(jù)?;钴S的流式數(shù)據(jù)在web網(wǎng)站應(yīng)用中非常常見,這些數(shù)據(jù)包括網(wǎng)站的pv、用戶訪問了什么內(nèi)容,搜索了什么內(nèi)容等。 這些數(shù)據(jù)通常以日志的形式記錄下來,然后每隔一段時間進(jìn)行一次統(tǒng)計處理。
傳統(tǒng)的日志分析系統(tǒng)提供了一種離線處理日志信息的可擴(kuò)展方案,但若要進(jìn)行實時處理,通常會有較大延遲。而現(xiàn)有的消(隊列)系統(tǒng)能夠很好的處理實時或者近似實時的應(yīng)用,但未處理的數(shù)據(jù)通常不會寫到磁盤上,這對于Hadoop之類(一小時或者一天只處理一部分?jǐn)?shù)據(jù))的離線應(yīng)用而言,可能存在問題。Kafka正是為了解決以上問題而設(shè)計的,它能夠很好地離線和在線應(yīng)用。
3. Kafka架構(gòu)
- 生產(chǎn)者(producer):消息和數(shù)據(jù)產(chǎn)生者
- 代理(Broker):緩存代理
- 消費者(consumer):消息和數(shù)據(jù)消費者
架構(gòu)很簡單,Producer,consumer實現(xiàn)Kafka注冊的接口,數(shù)據(jù)從producer發(fā)送到broker,broker承擔(dān)一個中間緩存和分發(fā)的作用。broker分發(fā)注冊到系統(tǒng)中的consumer。
4. 設(shè)計要點
(1) 直接使用linux 文件系統(tǒng)的cache,來高效緩存數(shù)據(jù)。
(2) 采用linux Zero-Copy提高發(fā)送性能。傳統(tǒng)的數(shù)據(jù)發(fā)送需要發(fā)送4次上下文切換,采用sendfile系統(tǒng)調(diào)用之后,數(shù)據(jù)直接在內(nèi)核態(tài)交換,系統(tǒng)上下文切換減少為2次。根據(jù)測試結(jié)果,可以提高60%的數(shù)據(jù)發(fā)送性能。Zero-Copy詳細(xì)的技術(shù)細(xì)節(jié)可以參考:https://www.ibm.com/developerworks/linux/library/j-zerocopy/
(3) 數(shù)據(jù)在磁盤上存取代價為O(1)。
- 以topic來進(jìn)行消息管理,每個topic包含多個part(ition),每個part對應(yīng)一個邏輯log,有多個segment組成。
- 每個segment中存儲多條消息(見下圖),消息id由其邏輯位置決定,即從消息id可直接定位到消息的存儲位置,避免id到位置的額外映射。
- 每個part在內(nèi)存中對應(yīng)一個index,記錄每個segment中的第一條消息偏移。
- 發(fā)布者發(fā)到某個topic的消息會被均勻的分布到多個part上(隨機(jī)或根據(jù)用戶指定的回調(diào)函數(shù)進(jìn)行分布),broker收到發(fā)布消息往對應(yīng)part的最后一個segment上添加該消息,當(dāng)某個segment上的消息條數(shù)達(dá)到配置值或消息發(fā)布時間超過閾值時,segment上的消息會被flush到磁盤,只有flush到磁盤上的消息訂閱者才能訂閱到,segment達(dá)到一定的大小后將不會再往該segment寫數(shù)據(jù),broker會創(chuàng)建新的segment。
(4) 顯式分布式,即所有的producer、broker和consumer都會有多個,均為分布式的。Producer和broker之間沒有負(fù)載均衡機(jī)制。broker和consumer之間利用zookeeper進(jìn)行負(fù)載均衡。所有broker和consumer都會在zookeeper中進(jìn)行注冊,且zookeeper會保存他們的一些元數(shù)據(jù)信息。如果某個broker和consumer發(fā)生了變化,所有其他的broker和consumer都會得到通知。
5. 類似的系統(tǒng)
RocketMQ:國內(nèi)淘寶團(tuán)隊參考開源的實現(xiàn)的消息隊列,解決了kafka的一些問題,如優(yōu)先級問題。
6. 參考資料:
- http://blog.chinaunix.net/uid-20196318-id-2420884.html
- http://dongxicheng.org/search-engine/kafka/
【本文為51CTO專欄作者“大數(shù)據(jù)和云計算”的原創(chuàng)稿件,轉(zhuǎn)載請通過微信公眾號獲取聯(lián)系和授權(quán)】
戳這里,看該作者更多好文
新聞名稱:高速數(shù)據(jù)總線kafka介紹
標(biāo)題路徑:http://m.fisionsoft.com.cn/article/dppghhg.html


咨詢
建站咨詢
