kafka入門介紹

2022-08-29 17:18:30 字數 2569 閱讀 9435

背景:

當今社會各種應用系統諸如商業、社交、搜尋、瀏覽等像資訊工廠一樣不斷的生產出各種資訊,在大資料時代,我們面臨如下幾個挑戰:

以上幾個挑戰形成了乙個業務需求模型,即生產者生產(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即可。

推薦閱讀:

1,spark streaming 中管理 kafka offsets 的幾種方式

2,開源訊息中介軟體kafka在華泰**的探索與實踐

3,重磅:flume1-7結合kafka講解

4,kafka原始碼系列之實現自己的kafka監控

kafka入門介紹

背景 當今社會各種應用系統諸如商業 社交 搜尋 瀏覽等像資訊工廠一樣不斷的生產出各種資訊,在大資料時代,我們面臨如下幾個挑戰 如何收集這些巨大的資訊 如何分析它 如何及時做到如上兩點 以上幾個挑戰形成了乙個業務需求模型,即生產者生產 produce 各種資訊,消費者消費 consume 處理分析 這...

kafka入門介紹

背景 當今社會各種應用系統諸如商業 社交 搜尋 瀏覽等像資訊工廠一樣不斷的生產出各種資訊,在大資料時代,我們面臨如下幾個挑戰 如何收集這些巨大的資訊 如何分析它 如何及時做到如上兩點 以上幾個挑戰形成了乙個業務需求模型,即生產者生產 produce 各種資訊,消費者消費 consume 處理分析 這...

Kafka介紹入門

通過檢視官網 根據官網介紹流處理平台具有三種特性 可以讓你發布和訂閱流式的記錄。這一方面與訊息佇列或者企業訊息系統類似。可以儲存流式的記錄,並且有較好的容錯性。可以在流式記錄產生時就進行處理。構造實時流資料管道,它可以在系統或應用之間可靠地獲取資料。相當於message queue 構建實時流式應用...