背景:
當今社會各種應用系統諸如商業、社交、搜尋、瀏覽等像資訊工廠一樣不斷的生產出各種資訊,在大資料時代,我們面臨如下幾個挑戰:
如何收集這些巨大的資訊
如何分析它
如何及時做到如上兩點
以上幾個挑戰形成了乙個業務需求模型,即生產者生產(produce)各種資訊,消費者消費(consume)(處理分析)這些資訊,而在生產者與消費者之間,需要乙個溝通兩者的橋梁-訊息系統。
從乙個微觀層面來說,這種需求也可理解為不同的系統之間如何傳遞訊息。
kafka誕生:由 linked-in 開源
kafka-即是解決這類問題的乙個框架,它實現了生產者和消費者之間的無縫連線。
kafka-高產出的分布式訊息系統(a high-throughput distributed messaging system)
kafka特性:它形容自己的設計是獨一無二的,先看一下它有如何過人之處:
kafka的元件:
如下圖所示,producer生產的訊息通過網路傳送給kafka cluster,而consumer從其中消費訊息
topic 和partition:
訊息傳送時都被傳送到乙個topic,其本質就是乙個目錄,而topic由是由一些partition logs(分割槽日誌)組成,其組織結構如下圖所示:
(乙個主題可以包含多個分割槽)
我們可以看到,每個partition中的訊息都是有序的,生產的訊息被不斷追加到partition log上,其中的每乙個訊息都被賦予了乙個唯一的offset值。
kafka集群會儲存所有的訊息,不管訊息有沒有被消費;我們可以設定訊息的過期時間,只有過期的資料才會被自動清除以釋放磁碟空間。比如我們設定訊息過期時間為2天,那麼這2天內的所有訊息都會被儲存到集群中,資料只有超過了兩天才會被清除。
kafka需要維持的元資料只有乙個--消費訊息在partition中的offset值,consumer每消費乙個訊息,offset就會加1。其實訊息的狀態完全是由consumer控制的,consumer可以跟蹤和重設這個offset值,這樣的話consumer就可以讀取任意位置的訊息。
把訊息日誌以partition的形式存放有多重考慮,第一,方便在集群中擴充套件,每個partition可以通過調整以適應它所在的機器,而乙個topic又可以有多個partition組成,因此整個集群就可以適應任意大小的資料了;第二就是可以提高併發,因為可以以partition為單位讀寫了。
分布式:
(主從集群)
這些partitions分布在集群的每一台server上,而每乙個partition在集群中都可以有多個備份,這個備份數量是可配置的。
每個partition都有乙個leader server,而其他備份的server都稱為followers,只有leader伺服器才會處理這個partition上所有的讀寫請求,而其它followers則被動的複製leader上的資料。如果乙個leader掛掉了,followers中的乙個伺服器則會自動公升級為leader。因此,其實集群中的每個伺服器都扮演著乙個partition的leader伺服器,和其它partition的follower伺服器。
producers:
producer可以根據自己的選擇發布訊息到乙個主題,producer也可以自己決定把訊息發布到這個主題的哪個partition,當然我們可以選擇api提供的簡單的分割槽選擇演算法,也可以自己去實現乙個分割槽選擇演算法。
consumers:
訊息傳遞通常由兩種模式,queuing(佇列)和publish-subscribe (發布-訂閱)
kafka通過提供了乙個對consumer的抽象來同時實現這兩種模式-consumergroup。consumer例項需要給自己指定乙個consumergroup的名字,如果所有的例項都用同乙個consumergroup名字,那麼這些consumer就會以queuing的模式工作;如果所有的例項分別用的不同的consumergroup名字,那麼它們就以public-subscribe模式工作。
(group的概念只針對於客戶端,如果有多個客戶端定義了多個組時,broker會以pub-scrib的形式將訊息傳送到每乙個group上)
如下圖所示:含兩台server的集群一共有p0~p3四個partition,兩個consumer group,在group內部是以queuing的模式消費partition,在group之間是以pub-scrib模式消費。
訊息順序性:
kafka是如何確保訊息消費的順序性的呢?前面講到過partition,訊息在乙個partition中的順序是有序的,但是kafka只保證訊息在乙個partition中有序,如果要想使整個topic中的訊息有序,那麼乙個topic僅設定乙個partition即可。
kafka入門介紹
背景 當今社會各種應用系統諸如商業 社交 搜尋 瀏覽等像資訊工廠一樣不斷的生產出各種資訊,在大資料時代,我們面臨如下幾個挑戰 如何收集這些巨大的資訊 如何分析它 如何及時做到如上兩點 以上幾個挑戰形成了乙個業務需求模型,即生產者生產 produce 各種資訊,消費者消費 consume 處理分析 這...
Kafka介紹入門
通過檢視官網 根據官網介紹流處理平台具有三種特性 可以讓你發布和訂閱流式的記錄。這一方面與訊息佇列或者企業訊息系統類似。可以儲存流式的記錄,並且有較好的容錯性。可以在流式記錄產生時就進行處理。構造實時流資料管道,它可以在系統或應用之間可靠地獲取資料。相當於message queue 構建實時流式應用...
kafka入門介紹
背景 當今社會各種應用系統諸如商業 社交 搜尋 瀏覽等像資訊工廠一樣不斷的生產出各種資訊,在大資料時代,我們面臨如下幾個挑戰 以上幾個挑戰形成了乙個業務需求模型,即生產者生產 produce 各種資訊,消費者消費 consume 處理分析 這些資訊,而在生產者與消費者之間,需要乙個溝通兩者的橋梁 訊...