您好,登錄后才能下訂單哦!
kafka該如何入門,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
背景:
當今社會各種應用系統諸如商業、社交、搜索、瀏覽等像信息工廠一樣不斷的生產出各種信息,在大數據時代,我們面臨如下幾個挑戰:
如何收集這些巨大的信息
如何分析它
如何及時做到如上兩點
以上幾個挑戰形成了一個業務需求模型,即生產者生產(produce)各種信息,消費者消費(consume)(處理分析)這些信息,而在生產者與消費者之間,需要一個溝通兩者的橋梁-消息系統。
從一個微觀層面來說,這種需求也可理解為不同的系統之間如何傳遞消息。
Kafka誕生:由 linked-in 開源
kafka-即是解決這類問題的一個框架,它實現了生產者和消費者之間的無縫連接。
kafka-高產出的分布式消息系統(A high-throughput distributed messaging system)
Kafka特性:它形容自己的設計是獨一無二的,先看一下它有如何過人之處:
快:單個kafka服務每秒可處理數以千計客戶端發來的幾百MB數據。
可擴展性:一個單一集群可作為一個大數據處理中樞,集中處理各種類型業務
持久化:消息被持久化到磁盤(可處理TB數據級別數據但仍保持極高數據處理效率),并且有備份容錯機制
分布式:著眼于大數據領域,支持分布式,集群可處理每秒百萬級別消息
實時性:生產出的消息可立即被消費者消費
Kafka的組件:
topic:消息存放的目錄即主題
Producer:生產消息到topic的一方
Consumer:訂閱topic消費消息的一方
Broker:Kafka的服務實例就是一個broker
如下圖所示,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 (發布-訂閱)
queuing:每個Consumer從消息隊列中取走一個消息
pub-scrib:消息被廣播到每個Consumer
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該如何入門問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。