天天看點

kafka官方文檔學習筆記1--基本概念了解

kafka是一個分布式流式平台,能夠通過訂閱-釋出模式在應用之間實時傳遞資料流,同時保證可靠性和容錯性;簡單了解,就是一個分布式消息隊列。

broker:即kafka程序執行個體,既可以以單點方式運作,也可以通過多個節點組成叢集運作;

record:kafka中的每條記錄稱為一個record,由key、value、timestamp 3個部分組成;

topic:消息可以分類,每個類别稱作一個topic,一個topic可以了解為一個邏輯上的消息隊列;

partition:一個topic所包含的資料可以通過"分區"存放到不同的實體機上或者存放到同一實體機的不同目錄。引入partition表示topic在實體上的分區,對應檔案系統的一個目錄(存放分區對應的record和索引檔案)。

producer:産生消息的一組程序,負責将消息放入到broker;

consumer:處理消息的一組程序,負責讀取broker中的消息并執行業務處理;

consumer group:用來指定同屬一個組的consumer,同一組的consumer不能重複消費同一條消息,因為同一個group的consumer分别對接消費不同的partition;

差別于上述基本概念,主要是用于提供程式設計的API:

kafka官方文檔學習筆記1--基本概念了解

Producer API:用于程式設計實作producer邏輯,釋出消息到一個或者多個topic;

Consumer API:用于程式設計實作consumer邏輯,從一個或者多個topic中訂閱并且處理消息;

Stream API:将應用程式作為一個流式處理器,從topic中訂閱消息、并進行處理,然後再釋出到其它topic中;

Connector API:用于負責對接broker和外部系統之間的資料讀寫操作,kafka已經提供很多現成的connector實作。可以幫助建立一個可以重用的Producer或者Consumer,比如:通過基于關系型資料庫的connector可以在資料表中儲存每次變更;基于檔案系統的connector,可以實作broker與檔案之間的資料傳遞;

kafka官方文檔學習筆記1--基本概念了解

topic可以看做是對一系列消息的分類,producer會将相同類别的消息發送到同一個topic。一個topic可以被0個或者多個consumer訂閱。

在kafka叢集内部,一個topic的資料會存放到多個分區日志中,每個分區稱為一個partition;

在一個partition中,消息序列是有序的(按照寫入的時間順序)、并且不可變的(消息送出,不可改變);partition中會為每條消息配置設定一個唯一的id,稱作offset,用來唯一辨別分區中的一條消息記錄;

topic中消息的順序并非全局有序,隻是局部有序; 單看每個partition中的消息都是按照寫入順序排列的,但是從topic的視角來看,由于是并發處理多個partition中的消息,因而整個處理過程并非是有序的;

kafka叢集會儲存所有已經釋出的消息,無論消息是否被消費;可以配置保留消息的時長;kafka中性能随着資料量的增加是常數級下降,因而保留較長時間段的消息并不是問題;

consumer處理消息的辨別,由consumer自己維護,每個consumer中需要保留offset中繼資料,用于辨別目前讀取消息在日志中的位置;

消息讀取進度由每個consumer通過改變offset自行控制; consumer即可以按照順序讀取每一條消息,也可以改變offset到之前的位置,重複讀取舊的消息;或者改變offset到之後的位置,用來跳過一部分消息;這種設計使得consumer的接入和斷開變得非常容易,不會影響到叢集中的其它consumer;

partition的設計主要包含2個目的:擴容和并發。首先,一個topic可以包含多個partition,多個partition可以分布在多個機器上,因而可以處理大規模的資料;同時,多個partition可以同時被多個consumer消費,因而提高了并發性;

broker:一個kafka叢集中的一個執行個體程序。一個topic的partition可以分布在叢集中的多個broker;每個partition可以通過配置指定副本數量,每個副本(replication)存放在不同的broker上,以此進行容錯;

partition:每個partition的副本包含一個leader、0個或者多個follower。leader負責處理目前partition資料的所有讀寫請求,同時所有follower複制同步leader的資料;當leader所在的broker宕掉後,follower中的一個會自動變為新的leader;叢集中的每個broker都可以看做是一部分partition的leader,同時又可以看做是其它partition的follower,因而保證了叢集的負載均衡;

producer:用于釋出消息到多個topic的一組程序。可以選擇消息釋出在topic的那個partition上。即可以以輪詢的方式将消息輪流放到每個partition上,以保證負載均衡。也可以通過定制分區政策來保證消息落到特定的分區;

consumer:用于處理消息的一組程序或者多組程序。每組程序劃分為一個group,對于同一個topic的一個group内,一條消息隻會被一個consumer消費。一個group中的一個consumer負責消費一個topic中的一個或者多個partition,不同的consumer消費的partition不重合。該設計可以保證同一個group内消息的負載均衡,又可以保證消息不被同時消費。consumer和partition通過kafka協定動态維護,當新加入一個consumer,将會把其餘consumer負責消費的partition配置設定給該consumer;相反,當有consumer當機後,其負責的partition将會被配置設定給剩餘的consumer。一個group中的consumer數量不應該比partition的數量多。

kafka官方文檔學習筆記1--基本概念了解
partition+group 保證按順序讀取消息

在一個group中,一個partition隻會綁定給一個consumer程序消費,且一個partition中的消息是局部有序的。如果我們需要保障某一批消息按順序執行,隻要保障其能夠落入同一個partition中即可(消息設定相同的key)。如果需要保證消息的全局順序,則可以使topic僅包含一個partition,進而僅有一個consumer進行消費;

消息隊列

kafka用作message broker(消息代理),适用于高吞吐、内建分區、可複制、可容錯的消息隊列。

網站活動追蹤

通過一系列實時的訂閱-釋出資料流,重建使用者活動軌迹。将網站活動(PV,搜尋等動作)釋出到kafka的topic中,供下遊實時處理,監控或者加載到線下資料倉庫做離線計算和報表。

運作資料統計

用于監控運作資料,彙聚之後進行統計。

日志聚合

用于替代Flume、Scribe的等日志收集工具,提供高性能、持久性、低延遲的日志收集。

流式處理

用作流式處理工具,進行資料的聚合、富集、轉換等操作。類似與Apache Storm等工具。

事件源模式實作