消息隊列kafka 消息隊列kafka

 

消息隊列kafka

 

爲何用消息隊列html

舉例緩存

好比在一個企業裏,技術老大接到boss的任務,技術老大把這個任務拆分紅多個小任務,完成全部的小任務就算搞定整個任務了。
那麼在執行這些小任務的時候,可能有一個環節很費時間,而且優先級很低,推遲完成也不影響整個任務運轉,那麼技術老大就會將這個很費時間,且不重要的任務,丟給他的小弟去解決,本身繼續完成其餘任務。

轉化爲計算機思想安全

那個技術老大就是一個 程序系統,那個小弟就是消息隊列。
當程序系統發現某些任務耗費時間且優先級較低,遲點完成也不影響整個任務,就把這個任務丟給消息隊列。

場景服務器

在程序系統中,例如外賣系統,訂單系統,庫存系統,優先級較高
發紅包,發郵件,發短信,app消息推送等任務優先級很低,很適合交給消息隊列去處理,以便於程序系統更快的處理其餘請求。

消息隊列工做流程微信

消息隊列通常有三個角色:
隊列服務端
隊列生產者
隊列消費者
消息隊列工做流程就如同一個流水線,有產品加工,一個輸送帶,一個打包產品
輸送帶就是 不停運轉的消息隊列服務端
加工產品的就是 隊列生產者
在傳輸帶結尾打包產品的 就是隊列消費者

隊列產品網絡

RabbitMQ
Erlang編寫的消息隊列產品,企業級消息隊列軟件,支持消息負載均衡,數據持久化等。

ZeroMQ 
saltstack軟件使用此消息,速度最快。

Redis
key-value的系統,也支持隊列數據結構,輕量級消息隊列

Kafka
由Scala編寫,目標是爲處理實時數據提供一個統1、高通量、低等待的平臺

一個app系統消息隊列工做流程數據結構

消費者,一個後臺進程,不斷的去檢測消息隊列中是否有消息,有消息就取走,開啓新線程去處理業務,若是沒有一會再來

kafka是什麼

在流式計算中,Kafka通常用來緩存數據,Storm經過消費Kafka的數據進行計算。架構

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

2)Kafka最初是由LinkedIn公司開發,並於 2011年初開源。2012年10月從Apache Incubator畢業。該項目的目標是爲處理實時數據提供一個統1、高通量、低等待的平臺。負載均衡

3)Kafka是一個分佈式消息隊列。Kafka對消息保存時根據Topic進行歸類,發送消息者稱爲Producer,消息接受者稱爲Consumer,此外kafka集羣有多個kafka實例組成,每一個實例(server)成爲broker。

4)不管是kafka集羣,仍是producer和consumer都依賴於zookeeper集羣保存一些meta信息,來保證系統可用性。

消息通訊圖


點對點模式(一對一,消費者主動拉取數據,輪詢機制,消息收到後消息清除,ack確認機制)

點對點模型一般是一個基於拉取或者輪詢的消息傳送模型,這種模型從隊列中請求信息,而不是將消息推送到客戶端。

這個模型的特色是發送到隊列的消息被一個且只有一個接收者接收處理,即便有多個消息監聽者也是如此。


發佈/訂閱模式(一對多,數據生產後,推送給全部訂閱者)

發佈訂閱模型則是一個基於推送的消息傳送模型。

發佈訂閱模型能夠有多種不一樣的訂閱者,臨時訂閱者只在主動監聽主題時才接收消息,而持久訂閱者則監聽主題的全部消息,即便當前訂閱者不可用,處於離線狀態。

消息隊列做用

1)程序解耦

容許你獨立的擴展或修改兩邊的處理過程,只要確保它們遵照一樣的接口約束。

2)冗餘:

消息隊列把數據進行持久化直到它們已經被徹底處理,經過這一方式規避了數據丟失風險。

許多消息隊列所採用的"插入-獲取-刪除"範式中,在把一個消息從隊列中刪除以前,須要你的處理系統明確的指出該消息已經被處理完畢,從而確保你的數據被安全的保存直到你使用完畢。

3)峯值處理能力:

(大白話,就是原本公司業務只須要5臺機器,可是臨時的秒殺活動,5臺機器確定受不了這個壓力,咱們又不可能將總體服務器架構提高到10臺,那在秒殺活動後,機器不就浪費了嗎?所以引入消息隊列)

在訪問量劇增的狀況下,應用仍然須要繼續發揮做用,可是這樣的突發流量並不常見。

若是爲以能處理這類峯值訪問爲標準來投入資源隨時待命無疑是巨大的浪費。

使用消息隊列可以使關鍵組件頂住突發的訪問壓力,而不會由於突發的超負荷的請求而徹底崩潰。

4)可恢復性:

系統的一部分組件失效時,不會影響到整個系統。

消息隊列下降了進程間的耦合度,因此即便一個處理消息的進程掛掉,加入隊列中的消息仍然能夠在系統恢復後被處理。

5)順序保證:

在大多使用場景下,數據處理的順序都很重要。

大部分消息隊列原本就是排序的,而且能保證數據會按照特定的順序來處理。(Kafka保證一個Partition內的消息的有序性)

6)緩衝:

有助於控制和優化數據流通過系統的速度,解決生產消息和消費消息的處理速度不一致的狀況。

7)異步通訊:

不少時候,用戶不想也不須要當即處理消息。好比發紅包,發短信等流程。

消息隊列提供了異步處理機制,容許用戶把一個消息放入隊列,但並不當即處理它。想向隊列中放入多少消息就放多少,而後在須要的時候再去處理它們。

應用

微信公衆號的訂閱
生產者寫入消息 -> kafka  -> 消費者

zookeeper會產生大量網絡io,zk所在節點,注意網絡監控

kafka角色

編輯,            生產消息,生產者
kafka集羣,臨時緩存消息  queue隊列有kafka維護
消費者         定時/輪訓    方式去pull 消息

topic主題

一樣的消息類型,放入同一個topic,
例如微信有不少公衆號,這個類別在kafka裏就叫topic主題
一個消費者能夠訂閱多個主題