Kafka理論概述和應用場景

1.Kafka概述

Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,它可以處理消費者規模的網站中的所有動作流數據。簡單地說,Kafka就相比是一個郵箱,生產者是發送郵件的人,消費者是接收郵件的人,Kafka就是用來存東西的,只不過它提供了一些處理郵件的機制。

                            

2.Kafka相關名詞分析

  • Broker:Kafka節點,一個Kafka節點就是一個broker,多個broker可以組成一個Kafka集羣
  • Topic:一類消息,消息存放的目錄即主題,例如page view日誌、click日誌等都可以以topic的形式存在,Kafka集羣能夠同時負責多個topic的分發
  • massage: Kafka中最基本的傳遞對象。
  • Partition:topic物理上的分組,一個topic可以分爲多個partition,每個partition是一個有序的隊列
  • Segment:partition物理上由多個segment組成,每個Segment存着message信息
  • Producer : 生產者,生產message發送到topic
  • Consumer : 消費者,訂閱topic並消費message, consumer作爲一個線程來消費
  • Consumer Group:消費者組,一個Consumer Group包含多個consumer
  • Offset:偏移量,理解爲消息partition中的索引即可

下面做進一步說明:

    broker即kafka程序,kafka程序運行於zookeeper之上,zookeeper是一個分佈式的,分佈式應用程序的協調服務,其提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。在此處,zookeeper協調kafka節點的配置、同步操作等。

    topic即主題,kafka中發佈消息、訂閱消息的對象是topic。我們可以爲每類數據創建一個topic。一個topic中的消息數據按照多個partition組織,分區是kafka消息隊列組織的最小單位(並不是物理上的最小單位),一個分區可以看作是一個FIFO( First Input First Output的縮寫,先進先出隊列)的隊列。如下圖:

                      

例如,在上圖中,一個topic被分成了3個分區(即partition0~2),用戶發佈message時,可以指定message所處topic的partition,如果沒有指定,則隨機分佈到該topic的partition。發佈的消息(其實是邏輯日誌)將在partition尾部插入。

  segment是partition的物理存儲單元,kafka收到message後,會向對應partition的最後一個segment上添加該消息,當某個segment上的消息條數達到配置值或消息發佈時間超過閾值時,segment上的消息會被保存到磁盤,只有被保存到磁盤上的消息consumer才能消費,segment達到一定的大小後將不會再往該segment寫數據,kafka會創建新的segment。其實,每個partition相當於分配到多個大小相等segment數據文件中。但每個segment消息數量不一定相等,這種特性方便無用的segment快速被刪除,segment文件生命週期由服務端配置參數決定。如下圖:

                              

  consumer和consumer group,一個consumer group包含多個consumer,用戶可以指定consumer的group。各個consumer可以組成一個group,partition中的每個message只能被一個group中的一個consumer消費,如果一個message想要被多個consumer消費的話,那麼這些consumer必須在不同的group。kafka不支持一個partition中的message同時由兩個或兩個以上的consumer thread來處理,即便是來自不同的consumer group的也不行。kafka爲了保證吞吐量,只允許一個consumer去訪問一個partition。如果覺得效率不高,可以加partition的數量來橫向擴展,再加新的consumer去消費,充分發揮了橫向的擴展性,吞吐量極高。這也就形成了分佈式消費的概念。如下圖:

                                                    

上圖中有兩個服務器的kafka羣集,它們有四個分區(P0-P3),其中有兩個group。group A有兩個消費者,group B有四個消費者。P0如果被C1消費後,則C2不能再消費,但是group B的C3或者其它的一個可以消費P0。

3.Kafka的優勢

 

  • 高吞吐量、低延遲:kafka每秒可以處理幾十萬條消息,它的延遲最低只有幾毫秒
  • 可擴展性:kafka集羣支持熱擴展
  • 持久性、可靠性:消息被持久化到本地磁盤,並且支持數據備份防止數據丟失
  • 容錯性:允許集羣中節點故障(若副本數量爲n,則允許n-1個節點故障)
  • 高併發:支持數千個客戶端同時讀寫

4.Kafka應用場景

  • 日誌收集:一個公司可以用Kafka可以收集各種服務的log,通過kafka以統一接口服務的方式開放給各種consumer
  • 消息系統:解耦生產者和消費者、緩存消息等
  • 用戶活動跟蹤:kafka經常被用來記錄web用戶或者app用戶的各種活動,如瀏覽網頁、搜索、點擊等活動,這些活動信息被各個服務器發佈到kafka的topic中,然後消費者通過訂閱這些topic來做實時的監控分析,亦可保存到數據庫
  • 運營指標:kafka也經常用來記錄運營監控數據。包括收集各種分佈式應用的數據,生產各種操作的集中反饋,比如報警和報告
  • 流式處理:比如spark streaming和storm;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章