大數據時代:Kafka如何做到1秒發布百萬條消息

大數據時代:Kafka如何做到1秒發布百萬條消息

來自專欄 FMI飛馬網

說起Kafka的第一個突出特定就是「快」,而且是那種變態的「快」。據最新的數據:每天利用Kafka處理的消息超過1萬億條,在峰值時每秒鐘會發布超過百萬條消息,就算是在內存和CPU都不高的情況下,Kafka的速度最高可以達到每秒十萬條數據,並且還能持久化存儲。那麼,Kafka是如何做到的呢?

Kafka簡介

Kafka是一種分散式的,基於發布/訂閱的消息系統。原本開發自LinkedIn,用作 LinkedIn的活動流(Activity Stream)和運營數據處理管道(Pipeline)的基礎。之後成為Apache項目的一部分,主要用於處理活躍的流式數據。

kafka有如下特性:

1、通過O(1)的磁碟數據結構提供消息的持久化,這種結構對於即使數以TB的消息存儲也能夠保持長時間的穩定性能;

2、高吞吐量:即使是非常普通的硬體kafka也可以支持每秒數十萬的消息;

3、支持通過kafka伺服器和消費機集群來分區消息;

4、支持Hadoop並行數據載入。

Kafka 架構

Kafka的整體架構非常簡單,是顯式分散式架構,producer、broker(kafka)和consumer都可以有多個。Producer,consumer實現Kafka註冊的介面,數據從 producer發送到broker,broker承擔一個中間緩存和分發的作用。broker分發註冊到系統中的consumer。broker的作用類似於緩存,即活躍的數據和離線處理系統之間的緩存。

kafka相關名詞解釋如下:

1、producer:消息生產者,發布消息到kafka集群的終端或服務。

2、broker:kafka集群中包含的伺服器。

3、topic:每條發布到kafka集群的消息屬於的類別,即kafka是面向topic的。

4、partition:partition是物理上的概念,每個topic包含一個或多個partition,kafka分配的單位是partition。

5、consumer:從kafka集群中消費消息的終端或服務。

6、Consumer group:high-level consumer API中,每個consumer都屬於一個consumer group,每條消息只能被consumer group的一個Consumer消費,但可以被多個consumer group消費。

7、replica:partition的副本,保障partition的高可用。

8、leader:replica中的一個角色, producer和consumer只跟leader交互。

9、follower:replica中的一個角色,從leader中複製數據。

10、controller:kafka集群中的其中一個伺服器,用來進行leader election以及各種failover。

11、zookeeper:kafka通過zookeeper來存儲集群的meta信息。

Kafka有四個核心的API。客戶端和伺服器端的通信,是基於簡單,高性能,且與編程語言無關的TCP協議。

因為每條消息都被append到該Partition中,屬於順序寫磁碟,因此效率非常高(經驗證,順序寫磁碟效率比隨機寫內存還要高,這是Kafka高吞吐率的一個很重要的保證)。Kafka集群分區日誌如下所示:

每個分區是一個有序的,不可變的記錄序列,不斷附加到結構化的提交日誌中。每個分區中的記錄都被分配一個順序的id號,稱為唯一標識分區中每個記錄的偏移量。

Kafka 應用場景

消息隊列

比起大多數的消息系統來說,Kafka有更好的吞吐量,內置的分區,冗餘及容錯性,這讓Kafka成為了一個很好的大規模消息處理應用的解決方案。

消息系統一般吞吐量相對較低,但是需要更小的端到端延時,並嘗嘗依賴於Kafka提供的強大的持久性保障。在這個領域,Kafka足以媲美傳統消息系統,如ActiveMR或RabbitMQ。

行為跟蹤

Kafka的另一個應用場景是跟蹤用戶瀏覽頁面、搜索及其他行為,以發布-訂閱的模式實時記錄到對應的Topic里。那麼這些結果被訂閱者拿到後,就可以做進一步的實時處理,或實時監控,或放到hadoop離線數據倉庫里處理。

元信息監控

作為操作記錄的監控模塊來使用,即彙集記錄一些操作信息,可以理解為運維性質的數據監控吧。

日誌收集

日誌收集方面,其實開源產品有很多,包括Scribe、Apache Flume。很多人使用Kafka代替日誌聚合(log aggregation)。

日誌聚合一般來說是從伺服器上收集日誌文件,然後放到一個集中的位置(文件伺服器或HDFS)進行處理。然而Kafka忽略掉文件的細節,將其更清晰地抽象成一個個日誌或事件的消息流。

這就讓Kafka處理過程延遲更低,更容易支持多數據源和分散式數據處理。比起以日誌為中心的系統比如Scribe或者Flume來說,Kafka提供同樣高效的性能和因為複製導致的更高的耐用性保證,以及更低的端到端延遲。

流處理

這個場景可能比較多,也很好理解。保存收集流數據,以提供之後對接的Storm或其他流式計算框架進行處理。很多用戶會將那些從原始Topic來的數據進行階段性處理,匯總,擴充或者以其他的方式轉換到新的Topic下再繼續後面的處理。

例如一個文章推薦的處理流程,可能是先從RSS數據源中抓取文章的內容,然後將其丟入一個叫做「文章」的topic中;後續操作可能是需要對這個內容進行清理,比如回復正常數據或者刪除重複數據,最後再將內容匹配的結果返還給用戶。

這就在一個獨立的Topic之外,產生了一系列的實時數據處理的流程。Strom和Samza是非常著名的實現這種類型數據轉換的框架。

事件源

事件源是一種應用程序設計的方式,該方式的狀態轉移被記錄為按時間順序排序的記錄序列。Kafka可以存儲大量的日誌數據,這使得它成為一個對這種方式的應用來說絕佳的後台。比如動態匯總(News feed)。

持久性日誌(commit log)

Kafka可以為一種外部的持久性日誌的分散式系統提供服務。這種日誌可以在節點間備份數據,並為故障節點數據回復提供一種重新同步的機制。Kafka中日誌壓縮功能為這種用法提供了條件。在這種用法中,Kafka類似於Apache BookKeeper項目。

關注公眾賬號

飛馬會

往期福利關注飛馬會公眾號,回復對應關鍵詞打包下載學習資料;回復「入群」,加入飛馬網AI、大數據、項目經理學習群,和優秀的人一起成長!

微軟大牛人工智慧系列課

(掃碼試聽或訂閱)

m.qlchat.com/live/chann (二維碼自動識別)

回復 數字「1」下載從入門到研究,人工智慧領域最值得一讀的10本資料(附下載)

回復 數字「2」機器學習 & 數據科學必讀的經典書籍,內附資料包!

回復 數字「3」走進AI & ML:從基本的統計學到機器學習書單(附PDF下載)

回復 數字「4」了解人工智慧,30份書單不容錯過(附電子版PDF下載)

回復 數字「6」AI人工智慧:54份行業重磅報告匯總(附下載)

回復 數字「7」TensorFlow介紹、安裝教程、圖像識別應用(附安裝包/指南)

回復 數字「10」麥肯錫160頁報告:2030年全球將可能8億人要被機器搶飯碗

回復 數字「12」小白| Python+Matlab+機器學習+深度神經網路+理論+實踐+視頻+課件+源碼,附下載!

回復 數字「14」小白| 機器學習和深度學習必讀書籍+機器學習實戰視頻/PPT+大數據分析書籍推薦!

回復 數字「16」100G Python從入門到精通!自學必備全套視頻教程+python經典書籍!

回復 數字「17」【乾貨】31篇關於深度學習必讀論文匯總(附論文下載地址)

回復 數字「18」526份行業報告+白皮書:AI人工智慧、機器人、智能出行、智能家居、物聯網、VR/AR、 區塊鏈等(附下載)

回復 數字「19」800G人工智慧學習資料:AI電子書+Python語言入門+教程+機器學習等限時免費領取!

回復 數字「20」17張思維導圖,一網打盡機器學習統計基礎(附下載)

回復 數字「22」吳恩達新書,教你構建機器學習項目:《Machine Learning Yearning》

回復 數字「23」機器學習:怎樣才能做到從入門到不放棄?(內含福利)

回復 數字「24」限時下載 | 132G編程資料:Python、JAVA、C,C++、機器人編程、PLC,入門到精通~

回復 數字「25」限資源 | 177G Python/機器學習/深度學習/演算法/TensorFlow等視頻,涵蓋入門/中級/項目各階段!

回復 數字「26」人工智慧入門書單推薦,學習AI的請收藏好(附PDF下載)

回復 數字「27」資源 | 吳恩達斯坦福CS230深度學習課程全套資料放出(附下載)

回復 數字「28」懂這個技術的程序員被BAT瘋搶...(內含資料包)

回復 數字「29」乾貨 | 28本大數據/數據分析/數據挖掘電子書合集免費下載!

推薦閱讀:

今日數據行業日報(2017.01.12)
閑聊
大數據給百姓帶來的便利,點開下面網址試試看。http: wx.allproof.net m ind...
今日數據行業日報(2017.5.10)
這位阿里程序媛有點拼,爬8米高的鍋爐,竟是為了這個!

TAG:Kafka | 大數據 | 大數據分析 |