Kafka概述
簡(jiǎn)介
Kafka是一個(gè)分布式的基于發(fā)布/訂閱模式的消息隊列,主要應用于大數據實(shí)時(shí)處理領(lǐng)域。
消息隊列
消息隊列模式:
1 ) 點(diǎn)對點(diǎn)模式
(一對一,消費者主動(dòng)拉取數據,消息收到后消息清除)
點(diǎn)對點(diǎn)模型通常是一個(gè)基于拉取或者輪詢(xún)的消息傳送模型,這種模型從隊列中請求信息,而不是將消息推送到客戶(hù)端。這個(gè)模型的特點(diǎn)是發(fā)送到隊列的消息被一個(gè)且只有一個(gè)接收者接收處理,即使有多個(gè)消息監聽(tīng)者也是如此。(缺點(diǎn):需要時(shí)刻監控隊列的消息變化,拉取數據,任務(wù)需要時(shí)刻開(kāi)啟,浪費資源)
發(fā)布/訂閱模式
(一對多,數據生產(chǎn)后,推送給所有訂閱者)
發(fā)布訂閱模型則是一個(gè)基于推送的消息傳送模型。發(fā)布訂閱模型可以有多種不同的訂閱者,臨時(shí)訂閱者只在主動(dòng)監聽(tīng)主題時(shí)才接收消息,而持久訂閱者則監聽(tīng)主題的所有消息,即使當前訂閱者不可用,處于離線(xiàn)狀態(tài)。(缺點(diǎn):推送消息的速度等沒(méi)有辦法適應所有的訂閱者,因為訂閱者的性能是不一樣的)
為什么需要消息隊列
- 解耦:
? 允許你獨立的擴展或修改兩邊的處理過(guò)程,只要確保它們遵守同樣的接口約束。 - 冗余:
? 消息隊列把數據進(jìn)行持久化直到它們已經(jīng)被完全處理,通過(guò)這一方式規避了數據丟失風(fēng)險。許多消息隊列所采用的"插入-獲取-刪除"范式中,在把一個(gè)消息從隊列中刪除之前,需要你的處理系統明確的指出該消息已經(jīng)被處理完畢,從而確保你的數據被安全的保存直到你使用完畢。 - 擴展性:
? 因為消息隊列解耦了你的處理過(guò)程,所以增大消息入隊和處理的頻率是很容易的,只要另外增加處理過(guò)程即可。 - 靈活性 & 峰值處理能力:
? 在訪(fǎng)問(wèn)量劇增的情況下,應用仍然需要繼續發(fā)揮作用,但是這樣的突發(fā)流量并不常見(jiàn)。如果為以能處理這類(lèi)峰值訪(fǎng)問(wèn)為標準來(lái)投入資源隨時(shí)待命無(wú)疑是巨大的浪費。使用消息隊列能夠使關(guān)鍵組件頂住突發(fā)的訪(fǎng)問(wèn)壓力,而不會(huì )因為突發(fā)的超負荷的請求而完全崩潰。 - 可恢復性:
? 系統的一部分組件失效時(shí),不會(huì )影響到整個(gè)系統。消息隊列降低了進(jìn)程間的耦合度,所以即使一個(gè)處理消息的進(jìn)程掛掉,加入隊列中的消息仍然可以在系統恢復后被處理。 - 順序保證:
? 在大多使用場(chǎng)景下,數據處理的順序都很重要。大部分消息隊列本來(lái)就是排序的,并且能保證數據會(huì )按照特定的順序來(lái)處理。(Kafka保證一個(gè)Partition內的消息的有序性) - 緩沖:
? 有助于控制和優(yōu)化數據流經(jīng)過(guò)系統的速度,解決生產(chǎn)消息和消費消息的處理速度不一致的情況。 - 異步通信:
? 很多時(shí)候,用戶(hù)不想也不需要立即處理消息。消息隊列提供了異步處理機制,允許用戶(hù)把一個(gè)消息放入隊列,但并不立即處理它。想向隊列中放入多少消息就放多少,然后在需要的時(shí)候再去處理它們。
Kafka架構
整體架構圖:
Kafka詳細架構圖:
Producer
:消息生產(chǎn)者,就是向kafka broker發(fā)消息的客戶(hù)端;Consumer
:消息消費者,向kafka broker取消息的客戶(hù)端;Consumer Group(CG)
:消費者組,由多個(gè)consumer組成。消費者組內每個(gè)消費者負責消費不同分區的數據,一個(gè)分區只能由一個(gè)消費者消費;消費者組之間互不影響。所有的消費者都屬于某個(gè)消費者組,即消費者組是邏輯上的一個(gè)訂閱者。Broker
:一臺kafka服務(wù)器就是一個(gè)broker。一個(gè)集群由多個(gè)broker組成。一個(gè)broker可以容納多個(gè)topic。Topi
:可以理解為一個(gè)隊列,生產(chǎn)者和消費者面向的都是一個(gè)topic;Partition
:為了實(shí)現擴展性,一個(gè)非常大的topic可以分布到多個(gè)broker(即服務(wù)器)上,一個(gè)topic可以分為多個(gè)partition,每個(gè)partition是一個(gè)有序的隊列;Replication
:副本,為保證集群中的某個(gè)節點(diǎn)發(fā)生故障時(shí),該節點(diǎn)上的partition數據不丟失,且kafka仍然能夠繼續工作,kafka提供了副本機制,一個(gè)topic的每個(gè)分區都有若干個(gè)副本,一個(gè)leader和若干個(gè)follower。leader
:每個(gè)分區多個(gè)副本的“主”,生產(chǎn)者發(fā)送數據的對象,以及消費者消費數據的對象都是leader。follower
:每個(gè)分區多個(gè)副本中的“從”,實(shí)時(shí)從leader中同步數據,保持和leader數據的同步。leader發(fā)生故障時(shí),某個(gè)follower會(huì )成為新的follower。
轉載自:Kafka概述

0 評論