kafka學習筆記(一)

WBerica發表於2020-11-23

kafka是什麼?

Kafka是一個分散式的、可分割槽的、可複製的、基於釋出/訂閱的訊息系統,Kafka主要用於大資料領域,當然在分散式系統中也有應用。目前市面上流行的訊息佇列RocketMQ就是阿里借鑑Kafka的原理、用Java開發而得

基本概念

什麼是Broker
  1. 一個單獨的Kafka server就是一個Broker,Broker的主要工作就是接收生產者傳送來的訊息,分配offset,然後將包裝過的資料儲存到磁碟上;此外,Broker還會接收消費者和其他Broker的請求,根據請求的型別進行相應的處理然後返回響應。多個Broker可以做成一個Cluster(叢集)對外提供服務,每個Cluster當中會選出一個Broker來擔任Controller,Controller是Kafka叢集的指揮中心,其他的Broker則聽從Controller指揮實現相應的功能。Controller負責管理分割槽的狀態、管理每個分割槽的副本狀態、監聽zookeeper中資料的變化等。Controller也是一主多從的實現,所有的Broker都會監聽Controller Leader的狀態,當Leader Controller出現了故障的時候就重新選舉新的Controller Leader。
訊息

訊息是Kafka中最基本的訊息單元。訊息由一串位元組組成,其中主要由key和value構成,key和value都是位元組陣列。key的主要作用是根據一定的策略,將這個訊息路由到指定的分割槽中,這樣就可以保證包含同一個key的訊息全部寫入同一個分割槽

Topic

Topic是用於儲存訊息的邏輯概念,Topic可以看做是一個訊息的集合。每個Topic可以有多個生產者向其中push訊息,也可以有多個消費者向其中pull訊息。

分割槽(partition)

每一個Topic都可以劃分成多個分割槽(每一個Topic都至少有一個分割槽),不同的分割槽會分配在不同的Broker上以對Kafka進行水平擴充套件從而增加Kafka的並行處理能力。同一個Topic下的不同分割槽包含的訊息是不同的。每一個訊息在被新增到分割槽的時候,都會被分配一個offset,他是訊息在此分割槽中的唯一編號,此外,Kafka通過offset保證訊息在分割槽中的順序,offset的順序性不跨分割槽,也就是說在Kafka的同一個分割槽中的訊息是有序的,不同分割槽的訊息可能不是有序的。
在這裡插入圖片描述

Log:

分割槽在邏輯上對應著一個Log,當生產者將訊息寫入分割槽的時候,實際上就是寫入到了一個Log中。Log是一個邏輯概念,對應的是一個磁碟上的資料夾。Log由多個Segment組成,每一個Segment又對應著一個日誌檔案和一個索引檔案。

副本

Kafka對訊息進行了冗餘備份,每一個分割槽都可以有多個副本,每一個副本中包含的訊息是相同的(但不保證同一時刻下完全相同)。副本的型別分為Leader和Follower,當分割槽只有一個副本的時候,該副本屬於Leader,沒有
Follower。Kafka的副本具有一定的同步機制,在每個副本集合中,都會選舉出一個副本作為Leader副本,Kafka在不同的場景中會採用不同的選舉策略。Kafka中所有的讀寫請求都由選舉出的Leader副本處理,其他的都作為Follower副本,Follower副本僅僅是從Leader副本中把資料拉取到本地之後,同步更新到自己的Log中。

生產者

生產者主要是生產資料並把它按照一定的規則推送到Topic的分割槽中

消費者

消費者主要是從Topic中拉取訊息,並對訊息進行消費。Consumer維護消費者消費者消費到Partition的哪一個位置(offset的值)這一資訊。**在Kafka中,多個Consumer可以組成一個Consumer Group,一個Consumer只能屬於一個Consumer Group。Consumer Group保證其訂閱的Topic中每一個分割槽只被分配給此Consumer Group中的一個消費者處理,所以如果需要實現訊息的廣播消費,則將消費者放在多個不同的Consumer Group中即可實現。**通過向Consumer Group中動態的新增適量的Consumer,可以出發Kafka的Rebalance操作重新分配分割槽與消費者的對應關係,從而實現了水平擴充套件的能力。

相關文章