1. 程式人生 > >kafka(三):核心概念以及框架

kafka(三):核心概念以及框架

一、核心概念

1.Message:

資料.傳遞的資料物件,主要由四部分構成:offset(偏移量)、key、value、timestamp(插入時間)。

2.Broker:

一般情況一臺伺服器一個broker,但是可以部署多個,反應到具體的程序就是Kafka程序

3.Topic:

是Kafka中一組訊息的一個整體概念,Produce將訊息寫入到對應的Topic,Consumer從對應的Topic讀取訊息

4.Partition:

一個Topic包含多個分割槽,Produce傳送到Topic的資料根據key的不同傳送到不同的partition中(預設情況是hash分的)。其中:      一個分割槽中的資料有兩個特性:
 (1)有序:按照進入kafka的時間排序
 (2)資料不可變:進入到kafka叢集的資料不可進行變動

5.Producer:資料生產者


6.Consumer:資料消費者


7.ConsumerGroup:

多個Consumer共同進行資料消費,然後多個Consumer之間形成負載均衡的一個特性;每個consumer都屬於一個特定的group組,一個group組可以包含多個consumer,但一個組中只會有一個consumer消費資料。其中:
        (1)一個ConsumerGroup中如果Consumer的數量和消費的Topic的Partition的數量一樣多,那麼每個Consumer消費一個Partition的資料
        (2)如果資料超過Partition的數量,那麼有部分consumer處於不消費資料的狀態
        (3)如過partition大於消費者的數量,那麼一個消費者就會消費多個partition

8.Zookeeper

      職責:負責Kafka元資料管理以及Consumer相關資料管理
    (1)Kafka元資料管理: 比如leader在哪裡,broker塊在哪裡,每個分割槽資料插入了多少,插入到那個偏移量資料?

    (2)Consumer相關資料管理: Consumer消費哪個topic,每個分割槽都消費了多少?

    (3)負責針對每一個partition選舉leader,比如kafka有10個topic,每個topic又有3個partition,那麼就會有30個leader。(而leader負責備份節點的資料同步)

二、框架

 

三、關鍵概念

1.offset偏移量

    (1)在每個Topic的每個Partition中,儲存資料的時候,會給每一條資料儲存一個當前訊息在當前Partition中的偏移量(該值從0開始遞增,型別為Long);這裡的偏移量的含義是指當前訊息在當前分割槽中是第幾條訊息;offset是由kafka的broker服務產生的,會隨著資料儲存到磁碟中,每個分割槽都會維護自己的offset偏移量序列,分割槽與分割槽之間的offset偏移量沒有任何關係   
    (2)消費者在消費Topic對應分割槽的時候,每個消費者會在zk&kafka中儲存該對應topic的消費資料量(eg: zk中看到的consumer offset偏移量的值表示的是該消費者在對應的分割槽上消費了多少條資料)  

2.Consumer Group

    (1)當多個Consumer的group.id引數值一致的情況下,這些consumer屬於同一組,同一組的consumer共享一個consumer offset偏移量資訊
    (2)一個Consumer Group消費某一個topic資料的時候,該Topic的每個分割槽只能被Consumer Group中的一個consumer消費
    (3)一個分割槽的資料可以被多個Consumer Group消費
    (4)在Consumer Group中,
            (a)如果Consumer的數量小於需要消費的分割槽數量,那麼一個consumer可能會消費多個分割槽的資料;
            (b)如果大於分割槽數量,那麼可能存在consumer不消費資料的情況;
            (c)如果相等,那麼可能存在一個consumer消費一個分割槽的資料。
            強調:一個Consumer Group中,一個Topic的分割槽的資料只能被一個Consumer消費;一個Consumer可以消費多個分割槽的資料


3.push和poll的區別:

    push指的是主動將資料傳遞給對方,不管對方是否能夠進行處理
    poll指的是根據自身的一個數據處理能力,主動的到資料產生方獲取資料
和flume的區別:flume都是push的方式,kafka有兩種可選擇的