首先了解一下消息隊列。
對於傳統消息隊列,遇到下述情況,可以使用消息隊列進行改造。

那么使用消息隊列的好處?
1.解耦,可以獨立擴展以及修改兩邊的處理過程,只需要確保接口的一致性即可,
2.可恢復性,當系統中一部分組件失效時候,不會影響整個系統,消息隊列降低了程序之間的耦合度,因此當處理消息的進程掛掉,加入隊列中的消息仍然可以在系統恢復之后被處理
舉個例子:對於電商系統的訂購,對於常規操作,可能訂單系統在在調用庫存系統時,由於庫存系統故障,導致訂單創建失敗,訂單系統與庫存系統高度耦合

那么引入消息隊列,訂單系統創建訂單完成之后,將減少庫存放入消息隊列中,就算庫存系統崩潰,訂單系統也可以完成創建,並且在庫存系統啟動之后讀取消息隊列中的信息,完成較少庫存任務。

3.流量削峰,在訪問量劇增的情況下,應用仍然需要繼續發揮作用,但是這個突發流量並不常見,如果以能處理這類的訪問標准來投入資源隨時待命,這就是巨大的浪費,當然對於可預見的比如雙十一,這個增加應用的副本數量無疑對用戶體檢以及訪問速度會提升很多。對於這種情況,消息隊列可以換件短時間內高流量壓垮應用。
舉個例子,例如秒殺活動,有時候會瞬間帶來超大的用戶訪問量,這個時候容易造成服務器癱瘓,這個時候引入消息隊列,秒殺系統逐步處理消息隊列中情況,可以短時間緩解系統壓力

4.異步通信,有時候對於產生出的消息,用戶並不想立即進行處理,這個石斛可以放入消息隊列中,以后想處理的時候在進行處理。
消息隊列分為兩種模式:
1.點對點模式,也即是P2P(point to point)
2. 發布/訂閱模式,也就是Pub/Sub模式
這個包含三個角色:主題(Topic),生產者(producer),消費者(consumer)。多個消費者可以將消息發送到Topic中,系統將這些消息傳遞給多個消費者。
發不到Topic的消息會被所有的訂閱者消費

kafka就是一個發布訂閱的模式。看一下kafka的官方介紹
kafka是一個分布式流數據處理平台,那么流數據處理平台一般都有下述三個特性
1.可以發布以及訂閱流式的記錄
2.儲存流式的記錄,並且有較好的容錯性
3.在流式記錄產生時就進行處理
那么kafka一般適用於的應用類別:
1.構造實時流數據管道,可以在系統或者應用之間可靠的獲取數據
2.構建實時流式應用程序,對這些流數據進行轉換或者影響。
kafka的概念:
1.kafka作為一個集群,運行在一台或者多台服務器上
2.kafka通過topic對存儲的流數據進行分類
3.每條記錄包含一個key,一個value和一個timestamp(時間戳)
kafka的四個核心API:
1. The Producer API 允許一個應用程序發布一串流式的數據到一個或者多個kafka topic
2.The Consumer API 允許一個應用程序訂閱一個或多個topic,並且對發布給他們的流式數據進行處理
3.The Streams API 允許一個應用程序作為一個流處理器,消費一個或者多個topic產生的輸入流,然后生產一個輸出流到一個或者多個topic中去,在輸入輸出流中進行有效的轉換
4.The Connector API 允許構建並運行可重用的生產者或消費者,將kafka topics連接到已存在的應用程序揮着數據吸用。比如連接到一個關系型數據庫,捕捉表的所有變更內容。

kafka客戶端以及服務端通信使用的是簡單,高性能支持多語言的TCP協議 。
Kafka的基礎架構:

1.Producer:消息生產者,也就是向kafka broker發消息的客戶端
2.Consumer:消息消費者,從kafka broker中去消息的客戶端
3.Consumer Group:消費者組,由多個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,leader與follower不再同一個服務器上,部署在一個服務器上沒有意義,因此副本數量加上leader一般小於等於服務器數量
8.leader:每個分區多個副本的“主”,生產這發送數據的對象,以及消費者消暑數據的對象都是leader
9.follower:每個分區多個副本的“從”,實時從leader中同步數據,保持和leader數據的同步。leader發生故障是,某個follower會成為新的leader。


