kafka 主動消費 Kafka基礎原理

2021-10-14 02:45:38 字數 3287 閱讀 9046

1、訊息中介軟體作用

解耦/非同步/削峰

2、訊息中介軟體通訊模式

如上圖所示,點對點模式通常是基於拉取或者輪詢的訊息傳送模型,這個模型的特點是傳送到佇列的訊息被乙個且只有乙個消費者進行處理。生產者將訊息放入訊息佇列後,由消費者主動的去拉取訊息進行消費。點對點模型的的優點是消費者拉取訊息的頻率可以由自己控制。但是訊息佇列是否有訊息需要消費,在消費者端無法感知,所以在消費者端需要額外的執行緒去監控。

3、原理與術語

producer:producer即生產者,訊息的產生者,是訊息的入口。kafka clusterbroker:broker是kafka例項,每個伺服器上有乙個或多個kafka的例項,我們姑且認為每個broker對應一台伺服器。每個kafka集群內的broker都有乙個不重複的編號,如圖中的broker-0、broker-1等……topic:訊息的主題,可以理解為訊息的分類,kafka的資料就儲存在topic。在每個broker上都可以建立多個topic。partition:kafka的每個topic都可以分為多個partition,並且多個 partition 會均勻分布在集群的各個節點下。topic的分割槽,每個topic可以有多個分割槽,分割槽的作用是做負載,提高kafka的吞吐量。同乙個topic在不同的分割槽的資料是不重複的,partition的表現形式就是乙個乙個的資料夾!replication:雖然每個topic都可以分為多個partition方式能夠有效的對資料進行分片,但是對於每個partition 來說,都是單點的,當其中乙個 partition 不可用的時候,那麼這部分訊息就沒辦法消費。所以 kafka 為了提高 partition 的可靠性而提供了副本的概念(replica),通過副本機制來實現冗餘備份。每乙個分割槽都有多個副本,副本的作用是做備胎。當主分割槽(leader)故障的時候會選擇乙個備胎(follower)上位,成為leader。在kafka中預設副本的最大數量是10個,且副本的數量不能大於broker的數量,follower和leader絕對是在不同的機器,同一機器對同乙個分割槽也只可能存放乙個副本(包括自己)。所有的讀寫請求都是由 leader 副本來進行處理。剩餘的其他副本都做為 follower 副本,follower 副本 會 從 leader 副 本 同 步 消 息 日 志 。當 leader 副本所在的 broker 出現故障後,可以重新選舉新的 leader 副本繼續對外提供服務。通過這樣的副本機制來提高 kafka 集群的可用性。

message:每一條傳送的訊息主體。consumer:消費者,即訊息的消費方,是訊息的出口。consumer group:我們可以將多個消費組組成乙個消費者組,在kafka的設計中同乙個分割槽的資料只能被消費者組中的某乙個消費者消費。同乙個消費者組的消費者可以消費同乙個topic的不同分割槽的資料,這也是為了提高kafka的吞吐量!zookeeper:kafka集群依賴zookeeper來儲存集群的的元資訊,來保證系統的可用性。

4、資料寫入流程

followers主動從leader去pull訊息

5、kafka 高效能機制

零拷貝

傳統的讀取檔案資料併發送到網路的步驟如下:

6、kafka高可靠(ha)機制

副本機制+訊息同步+leader選舉。

副本機制

每個topic有多個partition,每個partition又有多個副本,這些副本當中也存在不同的角色,leader、follower。producer和consumer都只跟leader進行互動,leader進行讀寫操作。leader負責將訊息寫進本地log當中,follower去leader上pull拉取資料,將資料同步到本地log當中。當leader掛了的時候,就利用zookeeper重新選出乙個leader即可。

其中,kafka將所有的partition均勻分布在集群中的broker上,所有的replica副本也均勻分布在集群中的broker上,這樣做主要是保證負載均衡和容錯能力。因為所有的分割槽和副本都在乙個broker上,那樣這個broker掛了,資料也就都丟失了。實現這個均勻分布,使用的是一種演算法。主要就是用求餘數的運算。

kafka分配replica的演算法如下:

總之,kafka的健壯性主要**其強大的副本策略。

訊息同步策略

producer傳送訊息到某個partition時,首先通過zookeeper獲取這個partition的leader, producer只將訊息傳送給leader ,leader將該訊息寫入其本地log中,follower從leader上pull資料。為了提高效能,follower收到訊息之後直接向leader返回ack,follower將訊息寫進本地log中。一旦leader收到了isr列表中的所有replica的ack,該訊息就被認為已經commit了,leader向producer傳送ack。

consumer讀訊息也只從leader讀取,只有commit的訊息才會暴露給consumer。 

leader選舉

所有的follower都在zookeeper上註冊watch監聽,一旦leader宕機,其對應的ephemeral znode臨時節點會被刪除,此時所有的follower都去嘗試建立該節點,建立成功者,成為新的leader,其他的replica就是follower。

leader選舉本質上是分布式鎖,有兩種方式實現基於zookeeper的分布式鎖。

節點名稱唯一性:多個客戶端建立乙個節點,只有建立成功的才會獲得鎖。

臨時順序節點:所有的客戶端在某個目錄下建立自己的臨時順序節點,只有序號最小的才會獲得鎖。

kafka 主動消費 Kafka消費者的使用和原理

publicstaticvoidmain string args finally 前兩步和生產者類似,配置引數然後根據引數建立例項,區別在於消費者使用的是反序列化器,以及多了乙個必填引數 group.id,用於指定消費者所屬的消費組。關於消費組的概念在 kafka中的基本概念 中介紹過了,消費組使得...

kafka消費之kafka檢視topic是否有資料

配置config檔案為 server.properties 指令碼在 kafka bin路徑下 啟動kafka kafka server start.sh config server.properties 1 dev null 2 1 kafka server start.sh檢視已建立的topic...

kafka消費原理

consumer 採用 pull 拉 模式從 broker 中讀取資料。push 推 模式很難適應消費速率不同的消費者,因為訊息傳送速率是由 broker 決定的。它的目標是盡可能以最快速度傳遞訊息,但是這樣很容易造成 consumer 來不及處理訊息,典型的表現就是拒絕服務以及網路擁塞。而 pul...