訊息佇列的主要功能
連線服務、訊息路由、訊息傳遞、資料持久化、日誌記錄
訊息佇列基本分類
1、點對點
生產者傳送訊息到佇列中,消費者從佇列中取出並消費。
訊息在消費以後,佇列中不再有儲存,佇列可以有多個消費者,但是一個訊息只能被一個消費者消費
2、釋出訂閱模式
生產者釋出訊息到主題topic中,同時有多個消費者訂閱topic,訊息會被所有訂閱者消費
Kafka介紹
1、沒有中心主節點的概念,叢集所有伺服器對等,可以在不更改任何配置的情況下實現伺服器的新增和刪除,生產者和消費者也可以隨意重啟上下線
2、broker是kafka伺服器,裡面還有topic和partition的概念,topic即主題,用於建立生成者和消費者之間的訂閱關係,生產者傳送訊息到指定的topic下,消費者從指定的topic消費訊息
3、partition即訊息分割槽,一個topic下會被劃分為多個分割槽,可以同時放在多臺伺服器上,每個partition都是一個有序的佇列,partition中的每條訊息都會被分配一個有序的offset.
4、group即消費者分組,用於歸類消費者,因為多個消費者可以共同消費一個topic下的訊息,每個消費者消費一部分
5、offset偏移量,消費者需要知道訊息在檔案中的偏移量
一些特點
1、訊息在broker中透過日誌追加的方式進行持久化儲存,並進行分割槽
2、訊息首先會存入buffer中,當訊息的個數或者大小達到閾值時,再進行刷盤
3、訊息的冗餘和可靠性是由分割槽副本機制來實現的,每個主題的分割槽可以配置多個副本並儲存在不同的broker上,即使一個當機,也可以選擇一個新的副本來處理
4、broker不儲存訂閱者的狀態,由訂閱者自己跟蹤和管理自己消費的偏移量,消費者可以選擇在消費訊息後立即提交偏移量,也可以在處理完成一批訊息後批次提交
5、雖然broker不會主動管理consumer的offset,但是consumer會將offer存在broker的特殊主題中,使得消費者故障恢復時可以從上次提交的偏移量開始繼續消費
6、正是由於broker不儲存offset,因此訊息的刪除策略不能依賴於消費狀態,而是依賴於時間的保留策略,預設保留七天,然後被刪除,這是SLA策略,即服務水平保證
7、訊息訂閱者可以回滾到任意的位置重新進行消費,當訂閱者故障時,可以選擇最小的offset進行訊息的重新讀取
8、每條訊息包含三個屬性,即:offset(唯一標識)、messageSize(訊息大小)、data(訊息內容)
9、kafka基於檔案儲存,透過分割槽可以將日誌內容分散到多個server上,以避免檔案尺寸達到單機磁碟的上線,同樣,透過劃分分割槽可以容納更多的consumer,提高消費能力。
10、每個partition只會被一個consumer消費,一個consumer可以消費多個partition,因此同一個group中,consumer的個數不能大於partition的個數
11、儲存時會根據id和Offset建立稀疏索引,保證log檔案的訪問速度