天天看點

Kafka實戰(二)-Kafka消息模型核心概念(上)1 特點Message1 Producer & Consumer(用戶端)2 Broker(伺服器端)3 Partitioning(分區)4 Topic5 3 Replication - 副本

Kafka是分布式的,基于釋出訂閱的消息系統。

1 特點

  • 同時為釋出和訂閱提供高吞吐量

    Kafka每秒可生産約25萬條消息(50 MB),每秒處理55萬條消息(110 MB)

  • 持久化

    預設就将消息持久化到磁盤,是以可用于批量消費,例如ETL,以及實時應用程式。通過将資料持久化到硬碟以及防止資料丢失。以O(1)時間複雜度提供消息持久化能力,即使對TB級以上資料也能保證常數時間複雜度的通路性能。

  • 分布式系統,易于向外擴充

    所有的producer、broker和consumer都會有多個,均為分布式的。無需停機即可擴充機器。消息被處理的狀态是在consumer端維護,而不是由server端維護。當失敗時能自動平衡

  • 支援online和offline場景

Kafka釋出訂閱的對象是主題(Topic),可為每個業務、每個應用甚至是每類資料都建立專屬的主題。

Message

消息,是通信的基本機關,每個producer可以向一個topic(主題)釋出一些消息

1 Producer & Consumer(用戶端)

  • 生産者(Producer)

    向主題釋出消息的用戶端應用。生産者程式通常持續不斷向一或多個主題發消息。

  • 消費者(Consumer)

    訂閱這些主題消息的用戶端應用程式。消費者也能同時訂閱多個主題消息。

生産者和消費者統稱為用戶端(Clients)。可同時運作多個生産者和消費者執行個體,這些執行個體會不斷向Kafka叢集中的多個主題生産和消費消息。

2 Broker(伺服器端)

Kafka的伺服器端由被稱為Broker的服務程序構成,即一個Kafka叢集由多個Broker組成。

Broker負責接收和處理用戶端發送過來的請求,以及對消息進行持久化。

雖然多個Broker程序能夠運作在同一機器,但更常見的做法是将不同的Broker分散運作在不同機器。

這樣如叢集中某一機器當機,即使在它上面運作的所有Broker程序都挂,其他機器的Broker也依然能夠對外提供服務。

這也是Kafka高可用的手段之一。

Kafka實戰(二)-Kafka消息模型核心概念(上)1 特點Message1 Producer & Consumer(用戶端)2 Broker(伺服器端)3 Partitioning(分區)4 Topic5 3 Replication - 副本

3 Partitioning(分區)

partition,實體上的概念,有序不可變的record序列,partition中的record會被配置設定一個自增長id(offset)。

一個topic中的消息資料按照多個分區組織,partition是kafka消息隊列組織的最小機關,一個partition可看做是一個隊列。

雖然副本機制可保證資料持久化以不丢消息,但未解決Scalability伸縮性問題。

雖現在有leader、follower副本,但若leader副本積累太多資料以至單台Broker無法容納,何如?

Kafka就會把資料分割成多份儲存在不同Broker,即分區。類似其他分布式系統的分片、分區域等提法,比如

MongoDB和Elasticsearch中的Sharding

HBase中的Region

都是相同原理,但Partitioning才是最标準名稱。

Kafka分區是将每個topic劃成多個分區(Partition),每個Partition内是一組順序消息日志。

生産者生産的每條消息隻會被發送到一個分區,即向一個雙分區的主題發送一條消息,該消息要麼在分區0,要麼在分區1(分區編号從0開始)。

副本與分區

副本是在分區級别定義的。

每個分區下可配置若幹個副本,其中隻能有1個上司者副本和N-1個追随者副本。

生産者向分區寫入消息,每條消息在分區中的位置資訊由一個叫位移(Offset)的資料來表征。

分區位移總是從0開始,假設一個生産者向一個空分區寫入了10條消息,那麼這10條消息的位移依次是0、1、2、…、9。

4 Topic

一個業務即一個Topic。

每條釋出到Kafka叢集的消息都有一個類别,這個類别被稱為Topic。實體上不同Topic的消息分開存儲,邏輯上一個Topic的消息雖儲存于一或多個broker,但使用者隻需指定消息的Topic即可生産或消費資料,不必關心資料存于何處。

資料主題,是Kafka中用來代表一個資料流的一個抽象,Kafka處理的消息源(feeds of messages)的不同分類。

釋出資料時,可用topic對資料分類,也作為訂閱資料時的主題。

一個Topic同時可有多個producer、consumer。

Topic可了解為一個隊列,生産者和消費者面向的都是同一topic。

Kafka實戰(二)-Kafka消息模型核心概念(上)1 特點Message1 Producer & Consumer(用戶端)2 Broker(伺服器端)3 Partitioning(分區)4 Topic5 3 Replication - 副本

5 3 Replication - 副本

實作高可用的另一個手段。

為保證分布式可靠性,kafka0.8開始對每個分區的資料進行備份(不同Broker上),防止其中一個Broker當機造成分區資料不可用。

每個partition被複制到其它伺服器作為replication,這是一種備援備份政策

Kafka實戰(二)-Kafka消息模型核心概念(上)1 特點Message1 Producer & Consumer(用戶端)2 Broker(伺服器端)3 Partitioning(分區)4 Topic5 3 Replication - 副本

同一partition的多個replication不允許在同一broker

每個partition的replication中,有一個leader,零或多follower

leader處理此分區所有的讀寫請求

follower僅被動的複制資料

leader當機後,會從follower中選舉出新的leader

副本數量是可配置的,副本儲存着相同的資料,卻有不同

3.1 副本的分類

Kafka定義了兩類副本

  • 上司者副本(Leader Replica)

    對外提供服務,與用戶端程式互動

  • 追随者副本(Follower Replica)

    隻被動地追随上司者副本,不與外界互動

在很多其他系統中追随者副本是可以對外提供服務的,比如MySQL的從庫是可以處理讀操作的,但是在Kafka中追随者副本不會對外提供服務。

3.2 副本的工作機制

  • 生産者總是向上司者副本寫消息
  • 而消費者總是從上司者副本讀消息

至于追随者副本,它隻做一件事:向上司者副本發送請求,請求上司者把最新生産的消息發給它,這樣它能保持與上司者的同步。

Kafka實戰(二)-Kafka消息模型核心概念(上)1 特點Message1 Producer & Consumer(用戶端)2 Broker(伺服器端)3 Partitioning(分區)4 Topic5 3 Replication - 副本