1. 程式人生 > >大數據時代:Kafka如何做到1秒發布百萬條消息

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

產生 新書 通信 nbsp 第一個 dff 分布式架構 思維導圖 小白

技術分享圖片

說起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/channe… (二維碼自動識別)

回復 數字“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本大數據/數據分析/數據挖掘電子書合集免費下載!

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