天天看點

Kafka基礎(一):Kafka 概述

消息隊列内部實作原理

Kafka基礎(一):Kafka 概述

(1)點對點模式(一對一,消費者主動拉取資料,消息收到後消息清除)

點對點模型通常是一個基于拉取或者輪詢的消息傳送模型,這種模型從隊列中請求資訊,而不是将消息推送到用戶端。這個模型的特點是發送到隊列的消息被一個且隻有一個接收者接收處理,即使有多個消息監聽者也是如此。

Kafka基礎(一):Kafka 概述

(2)釋出/訂閱模式(一對多,資料生産後,推送給所有訂閱者)

釋出訂閱模型則是一個基于推送的消息傳送模型。釋出訂閱模型可以有多種不同的訂閱者,臨時訂閱者隻在主動監聽主題時才接收消息,而持久訂閱者則監聽主題的所有消息,即

使目前訂閱者不可用,處于離線狀态。

Kafka基礎(一):Kafka 概述

1)解耦:

允許你獨立的擴充或修改兩邊的處理過程,隻要確定它們遵守同樣的接口限制。

2)備援:

消息隊列把資料進行持久化直到它們已經被完全處理,通過這一方式規避了資料丢失風險。許多消息隊列所采用的"插入-擷取-删除"範式中,在把一個消息從隊列中删除之前,需

要你的處理系統明确的指出該消息已經被處理完畢,進而確定你的資料被安全的儲存直到你使用完畢。

3)擴充性:

因為消息隊列解耦了你的處理過程,是以增大消息入隊和處理的頻率是很容易的,隻要另外增加處理過程即可。

4)靈活性 & 峰值處理能力:

在通路量劇增的情況下,應用仍然需要繼續發揮作用,但是這樣的突發流量并不常見。如果為以能處理這類峰值通路為标準來投入資源随時待命無疑是巨大的浪費。使用消息隊列

能夠使關鍵元件頂住突發的通路壓力,而不會因為突發的超負荷的請求而完全崩潰。

5)可恢複性:

系統的一部分元件失效時,不會影響到整個系統。消息隊列降低了程序間的耦合度,是以即使一個處理消息的程序挂掉,加入隊列中的消息仍然可以在系統恢複後被處理。

6)順序保證:

在大多使用場景下,資料處理的順序都很重要。大部分消息隊列本來就是排序的,并且能保證資料會按照特定的順序來處理。(Kafka 保證一個 Partition 内的消息的有序性)

7)緩沖:

有助于控制和優化資料流經過系統的速度,解決生産消息和消費消息的處理速度不一緻的情況。

8)異步通信:

很多時候,使用者不想也不需要立即處理消息。消息隊列提供了異步處理機制,允許使用者把一個消息放入隊列,但并不立即處理它。想向隊列中放入多少消息就放多少,然後在需要

的時候再去處理它們。

在流式計算中,Kafka 一般用來緩存資料,Storm 通過消費 Kafka 的資料進行計算。

1)Apache Kafka 是一個開源消息系統,由 Scala 寫成。是由 Apache 軟體基金會開發的一個開源消息系統項目。

2)Kafka 最初是由 LinkedIn 公司開發,并于 2011 年初開源。2012 年 10 月從 ApacheIncubator 畢業。該項目的目标是為處理實時資料提供一個統一、高通量、低等待的平台。

3)Kafka 是一個分布式消息隊列。Kafka 對消息儲存時根據 Topic 進行歸類,發送消息者稱為 Producer,消息接受者稱為 Consumer,此外 kafka 叢集有多個 kafka 執行個體組成,每個執行個體(server)稱為 broker。

4)無論是 kafka 叢集,還是 consumer 都依賴于 zookeeper 叢集儲存一些 meta 資訊,來保證系統可用性。

Kafka基礎(一):Kafka 概述
Kafka基礎(一):Kafka 概述

1)Producer :消息生産者,就是向 kafka broker 發消息的用戶端;

2)Consumer :消息消費者,向 kafka broker 取消息的用戶端;

3)Consumer Group (CG):消費者組,由多個 consumer 組成。消費者組内每個消費者負責消費不同分區的資料,一個分區隻能由一個組内消費者消費;消費者組之間互不影響。

所有的消費者都屬于某個消費者組,即消費者組是邏輯上的一個訂閱者。 

4)Broker :一台 kafka 伺服器就是一個 broker。一個叢集由多個 broker 組成。一個 broker可以容納多個 topic。

5)Topic :可以了解為一個隊列,生産者和消費者面向的都是一個 topic;

6)Partition:為了實作擴充性,一個非常大的 topic 可以分布到多個 broker(即伺服器)上,一個 topic 可以分為多個 partition,每個 partition 是一個有序的隊列; 

7)Replica:副本,為保證叢集中的某個節點發生故障時,該節點上的 partition 資料不丢失,且 kafka 仍然能夠繼續工作,kafka 提供了副本機制,一個 topic 的每個分區都有若幹個副本,

一個 leader 和若幹個 follower。

8)leader:每個分區多個副本的“主”,生産者發送資料的對象,以及消費者消費資料的對象都是 leader。

9)follower:每個分區多個副本中的“從”,實時從 leader 中同步資料,保持和 leader 資料的同步。leader 發生故障時,某個 follower 會成為新的 leader。