【中間件學習篇_Kafka】初識中間件及消息中間件Kafka No.1

在運維工作崗位上也一年之久了,日常工作中處理的最多的故障問題就屬中間件,平時接觸到的有常用的一些中間件,如tomcat,Apache,nginx,F5,Weblogic以及Springboot,還有幾種常用到的消息中間件,如:Kafka,RocketMQ等,對於中間件也從不知到稍微瞭解。接下來,在記錄博客的過程中將逐漸深入的學習。

一、什麼是中間件?

1、簡介:

       “中間件是介於應用系統和系統軟件之間的一類軟件,它使用系統軟件所提供的基礎服務(功能),銜接網絡上應用系統的各個部分或不同的應用,能夠達到資源共享、功能共享的目的。目前,它並沒有很嚴格的定義,但是普遍接受IDC的定義:中間件是一種獨立的系統軟件服務程序,分佈式應用軟件藉助這種軟件在不同的技術之間共享資源,中間件位於客戶機服務器的操作系統之上,管理計算資源和網絡通信。”

       上邊是百度百科上對中間件的解釋,雖然可能有點抽象,但是相信我們還是不難理解的。中間件並不是某一種軟件或者工具,它是一類具有相似作用軟件的總稱。由於其在整個業務或產品系統中它由於處於後臺操作系統軟件和用戶的應用系統軟件的中間,因此被稱爲中間件。其作用是爲上層應用系統提供統一的平臺和運行環境,屏蔽了底層操作系統的複雜性,使程序開發人員面對一個簡單而統一的開發環境,進而將注意力集中在自己的業務上,不必再爲程序在不同系統軟件上的移植而重複工作,從而大大減少了技術上的負擔,也減少了系統的維護、運行和管理的工作量。

2、分類:

       服務中間件、集成中間件、數據中間件、消息中間件、安全中間件。

3、常見中間件:

      Tomcat,Apache,Nginx,F5,JBoss,Weblogic,Springboot,Kafka,Zookeeper,RocketMQ,ElasticSearch等。

二、什麼是消息中間件?

1、簡介

      消息中間件顧名思義就是在不同應用間傳輸消息的一個系統,已經逐漸成爲企業IT系統內部通信的核心組件。它具有低耦合、可靠投遞、廣播、流量控制、最終一致性等一系列功能,成爲異步RPC的主要手段之一。

2、常用消息中間件

      Kafka,RocketMQ,RabbitMQ,ActiveMQ等

附:阿里巴巴消息中間團隊對常見的消息中間件性能對比:http://jm.taobao.org/2016/04/01/kafka-vs-rabbitmq-vs-rocketmq-message-send-performance/?utm_source=tuicool&utm_medium=referral

3、消息中間件的組成

 (1)Broker  消息服務器,也稱爲節點,作爲服務端提供消息的核心服務

 (2)Producer   消息生產者,業務的發起方,主要負責生產消息傳輸給broker,

 (3) Consumer   消息消費者,業務的處理方,負責從broker獲取消息並進行業務邏輯處理

 (4)Topic   主題,發佈訂閱模式下的消息統一彙集地,不同生產者向topic發送消息,由MQ服務器分發到不同的訂閱者,實現消息的廣播

 (5)Queue  隊列,PTP模式下,特定生產者向特定queue發送消息,消費者訂閱特定的queue完成指定消息的接收

  (6) Message  消息體,根據不同通信協議定義的固定格式進行編碼的數據包,來封裝業務數據,實現消息的傳輸

4、模式分類

(1)點對點(PTP)

              該模式下主要使用隊列(Queue)作爲通信的載體,如下圖:

說明: 
消息生產者生產消息發送到queue中,然後消息消費者從queue中取出並且消費消息。 消息被消費以後,queue中不再存儲,所以消息消費者不可能消費到已經被消費的消息。 Queue支持存在多個消費者,但是對一個消息而言,只會有一個消費者可以消費。

(2)發佈/訂閱(Pub/Sub)

      Pub/Sub發佈訂閱(廣播):主要使用主題(Topic)作爲通信載體 

說明: 
消息生產者(發佈)將消息發佈到topic中,同時有多個消息消費者(訂閱)消費該消息。

兩種模式的不同之處:

queue實現了負載均衡,將producer生產的消息發送到消息隊列中,由多個消費者消費。但一個消息只能被一個消費者接受,當沒有消費者可用時,這個消息會被保存直到有一個可用的消費者。 
topic實現了發佈和訂閱,當生產者發佈一個消息,所有訂閱這個topic的消費者都能得到這個消息,所以從1到N個訂閱者都能得到一個消息的拷貝。

5、應用場景

 (1)異步通信

有些業務不想也不需要立即處理消息。消息隊列提供了異步處理機制,允許用戶把一個消息放入隊列,但並不立即處理它。想向隊列中放入多少消息就放多少,然後在需要的時候再去處理它們。

 (2) 解耦

降低工程間的強依賴程度,針對異構系統進行適配。在項目啓動之初來預測將來項目會碰到什麼需求,是極其困難的。通過消息系統在處理過程中間插入了一個隱含的、基於數據的接口層,兩邊的處理過程都要實現這一接口,當應用發生變化時,可以獨立的擴展或修改兩邊的處理過程,只要確保它們遵守同樣的接口約束。

(3)冗餘

有些情況下,處理數據的過程會失敗。除非數據被持久化,否則將造成丟失。消息隊列把數據進行持久化直到它們已經被完全處理,通過這一方式規避了數據丟失風險。許多消息隊列所採用的”插入-獲取-刪除”範式中,在把一個消息從隊列中刪除之前,需要你的處理系統明確的指出該消息已經被處理完畢,從而確保你的數據被安全的保存直到你使用完畢。

(4) 擴展性

因爲消息隊列解耦了你的處理過程,所以增大消息入隊和處理的頻率是很容易的,只要另外增加處理過程即可。不需要改變代碼、不需要調節參數。便於分佈式擴容。

(5) 過載保護

在訪問量劇增的情況下,應用仍然需要繼續發揮作用,但是這樣的突發流量無法提取預知;如果以爲了能處理這類瞬間峯值訪問爲標準來投入資源隨時待命無疑是巨大的浪費。使用消息隊列能夠使關鍵組件頂住突發的訪問壓力,而不會因爲突發的超負荷的請求而完全崩潰。

(6) 可恢復性

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

(7)順序保證

在大多使用場景下,數據處理的順序都很重要。大部分消息隊列本來就是排序的,並且能保證數據會按照特定的順序來處理。

(8) 緩衝

在任何重要的系統中,都會有需要不同的處理時間的元素。消息隊列通過一個緩衝層來幫助任務最高效率的執行,該緩衝有助於控制和優化數據流經過系統的速度。以調節系統響應時間。

9)數據流處理

分佈式系統產生的海量數據流,如:業務日誌、監控數據、用戶行爲等,針對這些數據流進行實時或批量採集彙總,然後進行大數據分析是當前互聯網的必備技術,通過消息隊列完成此類數據收集是最好的選擇。

參考:https://blog.csdn.net/wqc19920906/article/details/82193316

三、Kafka初識

Kafka 中文文檔 - ApacheCN: http://kafka.apachecn.org/intro.html

1、什麼是Kafka?

Kafka是一個分佈式的基於發佈-訂閱的消息系統,是由Apache軟件基金會開發的一個開源流處理平臺,由Scala和Java編寫。

2、特性:

- 高吞吐量、低延遲:kafka每秒可以處理幾十萬條消息,它的延遲最低只有幾毫秒,每個topic可以分多個partition, consumer group 對partition進行consume操作。

- 可擴展性:kafka集羣支持熱擴展

- 持久性、可靠性:消息被持久化到本地磁盤,並且支持數據備份防止數據丟失

- 容錯性:允許集羣中節點失敗(若副本數量爲n,則允許n-1個節點失敗)

- 高併發:支持數千個客戶端同時讀寫

3、使用場景

(1)消息傳輸

(2)網站行爲日誌跟蹤

(3)審計數據收集

(4)日誌收集

(5)事件源

(6)流式處理

4、主要架構

整體架構總結起來就是:

(1)生產者將生產的消息發送給Kafka集羣。

(2)消費者從Kafka集羣拉取消息進行消費。

(3)Kafka集羣通過Zookeeper的分佈式協調服務進行協調管理。

 

 

千里之行,始於足下。

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