kafka學習筆記(一)——概述

1、kafka是什麼?

官方說明是:

Kafka是一個分佈式的基於發佈/訂閱模式消息隊列,主要應用於大數據實時處理領域。

提到了兩個概念:

  • 發佈/訂閱模式
  • 消息隊列

下邊來理解一下這兩個名詞。

2、消息隊列(Message Queue)

2.1 什麼是消息隊列?

兩個單詞簡寫一下就是MQ,拋開消息不看,那就只剩隊列了。

隊列:是一種先進先出(FIFO)的數據結構。數據結構課程中有涉及這個概念~

消息隊列可以簡單理解爲:把要傳輸的數據放在隊列中

我們把放消息的叫做:生產者;取消息的叫做:消費者

2.2、爲什麼使用消息隊列?

1)解耦

例如:我們的系統中有一個A模塊,B、C模塊需要使用A模塊提供的功能。如果A把提供的服務寫入到消息隊列中(生產者),B、C需要的時候就去隊列裏獲取這個服務(消費者)。這樣,三者的代碼互相不浸入,完美實現瞭解耦合的需求。如果再來一個D模塊,也要使用A的服務,它也只需去消息隊列中取就ok了。如果B\C\D不需要A的服務了,直接不取消息就行了,減少了頻繁改動代碼的惡習。

總結一下就是:

  • A只負責提供服務,誰來消費,關我毛事?~

  • 誰需要服務,誰就自己來拿,不需要就不拿。

2)異步

以一個註冊的例子來理解同步與異步的差異之處

  • 同步處理:走完整條業務代碼線,再返回給用戶註冊成功的消息
  • 異步處理:將用戶的註冊請求放入消息隊列後就返回註冊成功的消息,將寫入數據庫等等其它的業務將由後續代碼接着執行

舉個栗子:修手錶,邊修邊等,這是同步模式;修好來取,這是異步模式。

節省了用戶等待的時間,換句話就是減少了系統的響應時間~

3)削峯/限流

這兩個東西講的是一個概念,可類比於在計算機網絡課程中學習的數據鏈路層的流量控制功能。

例如:

​ 系統的訪問量特變大,假設每秒有3000個請求,而後臺有兩個服務器在同時工作,他們的工作能力是每秒處理1000個請求。那麼可想而知,充分利用機器的情況下,也會出現剩餘1000個請求無法處理的問題。

​ 這1000個請求難道要丟棄掉?當然不闊以遼~ 這時候,消息隊列又可以排上用場了:我們將收到的3000個請求全部放進消息隊列,後邊兩臺服務器來隊列中取數據進行處理,也就緩解了整個系統的鴨梨~

3、消息隊列的兩種模式

1)點對點模式

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

這是一種一對一的、消費者主動拉取數據的模式,消息被消費之後,就被從隊列裏清除,這種消費模式功能比較單一。

2)發佈/訂閱模式

消息生產者(發佈)將消息發佈到Topic中,同時有多個消息消費者(訂閱)消費該消息。和點對點方式不同,發佈到Topic的消息會被所有訂閱者消費。

小總結:

  • 基於這種模式,一條消息可以發給多個消費者;

  • 發佈訂閱模式有兩種:一種是隊列推送消息,一種是消費者拉取數據;

  • 造成的問題:推送消息的速度由隊列決定,消費者的處理能力不一定,例如:生產100條/s,消費50條/s ,所以kafka採取的是消費者拉取的模式。當然拉取模式也有缺點:消費者需要頻繁詢問是否有消息等待消費[維護着一個長輪詢]

4、kafka的基礎架構

  • Producer :消息生產者,就是向kafka broker發消息的客戶端;
  • Consumer :消息消費者,向kafka broker取消息的客戶端;
  • Consumer Group (CG):消費者組,由多個consumer組成。消費者組內每個消費者負責消費不同分區的數據,一個分區只能由一個消費者消費;消費者組之間互不影響。所有的消費者都屬於某個消費者組,即消費者組是邏輯上的一個訂閱者。
  • Broker :一臺kafka服務器就是一個broker。一個集羣由多個broker組成。一個broker可以容納多個topic。
  • Topic :可以理解爲一個隊列,生產者和消費者面向的都是一個topic;
  • Partition:爲了實現擴展性,一個大的topic可以分佈到多個broker(即服務器)上,一個topic可以分爲多個partition,每個partition是一個有序的隊列;
  • Replica:副本,爲保證集羣中的某個節點發生故障時,該節點上的partition數據不丟失,且kafka仍然能夠繼續工作,kafka提供了副本機制,一個topic的每個分區都有若干個副本,一個leader和若干個follower。
  • leader:每個分區多個副本的“主”,生產者發送數據的對象,以及消費者消費數據的對象都是leader。
  • follower:每個分區多個副本中的“從”,實時從leader中同步數據,保持和leader數據的同步。leader發生故障時,某個follower會成爲新的follower。

注意哦:

(1)生產者和消費者都是去找leader,follower 只是個備份數據;

(2)同一個消費者組裏的消費者不能消費同一個分區的數據,例如:同一個主題內只有2個數據分區,消費者組有3個消費者,那麼第三個消費者只能空佔資源,沒有消費;

(3)kafka把消息存放在磁盤上,默認保留7天;

(4)zookeeper:首先kafka集羣正常工作需要安裝ZK,協助管理集羣。只需要使得多個broker公用一個ZK,就能使得它們組成集羣工作。其次,消費者的消費偏移量(offset)保存在ZK裏面;(0.9版本之前存在ZK,0.9版本之後存放在kafka系統維護的一個topic中)。

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