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有兩種可選擇的