kafka詳解一 Kafka簡介

2021-08-27 19:42:14 字數 2741 閱讀 4231

分類: kafka

2014-08-18 10:45

375人閱讀收藏 

舉報

背景:

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

如何收集這些巨大的資訊

如何分析它       

如何及時做到如上兩點

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

如下圖所示:含兩台server的集群一共有p0~p3四個partition,兩個consumer group,在group內部是以queuing的模式消費partition,在group之間是以pub-scrib模式消費。

訊息順序性:

kafka是如何確保訊息消費的順序性的呢?前面講到過partition,訊息在乙個partition中的順序是有序的,但是kafka只保證訊息在乙個partition中有序,如果要想使整個topic中的訊息有序,那麼乙個topic僅設定乙個partition即可。

Kafka 詳解(一) 簡介

在前面幾篇部落格我們介紹過一種訊息中介軟體 rabbitmq,本篇部落格我們介紹另外乙個訊息中介軟體 kafka,kafka是由linkedin開發的,使用scala編寫,是一種分布式,基於發布 訂閱的訊息系統,在介紹 kafka 之前,我們首先需要知道為什麼會誕生 kafka 假設 a 公司有乙個...

Kafka(一)Kafka的簡介與架構

一 kafka中的術語解釋 生產者,上圖有兩個生產者,往同乙個往topic 主題 發訊息。2 topic 主題,這是乙個邏輯概念,就和資料庫表一樣,資料庫表可以存在於多個資料庫,同樣 傳送到topic的資料也會分散到不同的kafka節點上。3 partition 分割槽,乙個topic可以有多個分割...

kafka入門簡介

1 概述 kafka是linkedin於2010年12月份開源的訊息系統,它主要用於處理活躍的流式資料。活躍的流式資料在web 應用中非常常見,這些資料報括 的pv 使用者訪問了什麼內容,搜尋了什麼內容等。這些資料通常以日誌的形式記錄下來,然後每隔一段時間進行一次統計處理。2 設計目標 1 資料在磁...