Kafka入門和進階

什麼是Kafka

	Kafka 是一個分佈式的基於 發佈/訂閱模式 的流式平臺,主要應用於大數據實時處理領域。
它有三個關鍵能力:
	1.訂閱發佈記錄流,它類似於企業中的消息隊列 或 企業消息傳遞系統
	2.以容錯的方式存儲記錄流
	3.實時記錄流

Kafka 的應用

  • 作爲消息系統
  • 作爲存儲系統
  • 作爲流處理器

Kafka 可以建立流數據管道,可靠性的在系統或應用之間獲取數據。
建立流式應用傳輸和響應數據。

Kafka 作爲消息系統

Kafka 作爲消息系統,它有三個基本組件

  • Producer : 發佈消息的客戶端
  • Broker:一個從生產者接受並存儲消息的客戶端
  • Consumer : 消費者從 Broker中讀取消息

 

Kafka 基本概念

Kafka 作爲一個高度可擴展可容錯的消息系統,有很多 Kafka 專屬的概念

topic(主題)

     在 kafka 中,使用一個類別屬性來劃分消息的所屬類,劃分消息的這個類稱爲 topic。topic 相當於消息的分配標籤,是一個邏輯概念。主題好比是數據庫的表,或者文件系統中的文件夾。

partition(分區)

     topic 中的消息被分割爲一個或多個的 partition,它是一個物理概念,對應到系統上的就是一個或若干個目錄,一個分區就是一個 提交日誌。消息以追加的形式寫入分區,先後以順序的方式讀取。

注意:由於一個主題包含無數個分區,因此無法保證在整個 topic 中有序,但是單個 Partition 分區可以
保證有序。消息被迫加寫入每個分區的尾部。Kafka 通過分區來實現數據冗餘和伸縮性

分區可以分佈在不同的服務器上,也就是說,一個主題可以跨越多個服務器,以此來提供比單個服務器更強大的性能。
同一個分區只能被同一個組裏的消費者消費。

分區的原因:

  1. 方便在集羣中擴展:提高某一個Topic的負載均衡,從而提高吞吐量。
  2. 提高併發

分區原則:
我們需要將producer發送的數據封裝成一個ProducerRecord對象。

  1. 指明partition 的情況下,直接將指明的值直接作爲partiton 值;
  2. 沒有指明partition 值但有key的情況下,將key的hash 值與topic 的partition 數進行取餘得到partition 值;
  3. 既沒有partition 值又沒有key值的情況下,第一次調用時隨機生成一個整數(後面每次調用在這個整數上自增),將這個值與topic 可用的partition總數取餘得到partition 值,也就是常說的round-robin 算法。

segment(段)

     Kafka採取分片和索引機制,將 Partition 進一步細分爲若干個 segment,每個 segment 文件的大小相等。每個segment對應兩個文件:“.index”文件和“.log”文件。index文件中存儲了索引和偏移量(offset),每一條數據的大小是固定的,log文件存儲了具體的數據,會根據index中索引對應的偏移量找到log中對應的數據。
在這裏插入圖片描述

broker(服務器)

     Kafka 集羣包含一個或多個服務器,每個 Kafka 中服務器被稱爲 broker,一個broker可以容納多個topic。 broker 接收來自生產者的消息,爲消息設置偏移量,並提交消息到磁盤保存。broker 爲消費者提供服務,對讀取分區的請求作出響應,返回已經提交到磁盤上的消息。
    broker 是集羣的組成部分,每個集羣中都會有一個 broker 同時充當了 集羣控制器(Leader) 的角色,它是由集羣中的活躍成員選舉出來的。每個集羣中的成員都有可能充當 Leader,Leader 負責管理工作,包括將分區分配給 broker 和監控 broker。集羣中,一個分區總屬於一個 Leader,但是一個分區可以分配給多個 broker(非Leader),這時候會發生分區複製。 這種複製的機制爲分區提供了消息冗餘,如果一個 broker 失效,那麼其他活躍用戶會重新選舉一個 Leader 接管。
在這裏插入圖片描述

producer(生產者)

     生產者,即消息的發佈者,其會將某 topic 的消息發佈到相應的 partition 中。生產者在默認情況下把消息均衡地分佈到主題的所有分區上,而並不關心特定消息會被寫到哪個分區。不過,在某些情況下,生產者會把消息直接寫到指定的分區。

consumer(消費者)

     消費者,即消息的使用者,一個消費者可以消費多個 topic 的消息,對於某一個 topic 的消息,其只會消費同一個 partition 中的消息。
在這裏插入圖片描述

Consumer Group (CG)(消費者組)

     由多個consumer組成。消費者組內每個消費者負責消費不同分區的數據,一個分區只能由一個組內消費者消費;消費者組之間互不影響。 所有的消費者都屬於某個消費者組,即消費者組是邏輯上的一個訂閱者。

Replica(副本)

     爲保證集羣中的某個節點發生故障時,該節點上的partition數據不丟失,且kafka仍然能夠繼續工作,kafka提供了副本機制,一個topic的每個分區都有若干個副本,一個leader和若干個follower。副本數是一個broker中leader和follower的總和。

 

情景分析

消費者多於partition
即同一個partition內的消息只能被同一個組中的一個consumer消費。當消費者數量多於partition的數量時,多餘的消費者空閒。

消費者少於和等於partition
消息在同一個組之間的消費者之間均分

多個消費者組
多個組都會消費同一個消息,消費情況按組的情況分別處理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章