kafka分布式訊息佇列 基本概念介紹

2021-08-11 14:24:09 字數 2300 閱讀 2253

這個應該算是之前比較火熱的詞了,一直沒時間抽出來看看。乙個新東西出來,肯定是為了解決某些問題,不然不會有它的市場。先簡單看下。

官方介紹:分布式、分割槽、支援複製的日誌提交系統

適用場景:顧名思義,特別適合用於系統日誌的非同步記錄,對於資料穩定性、一致性、可靠性要求不高的場景,追求的是高吞吐量。非傳統的mq產品!

核心模型抽象:

topics:某種訊息的高層抽象

producers:訊息的生產者

consumers:訊息的消費者

broker:集群中的每乙個節點伺服器,多個broker組成乙個集群

整體結構圖

topic:

1.kafka集群會將每個topic進行分割槽,每個分割槽都是乙個排序且不可改變的佇列,新的訊息會進入隊尾並分配乙個唯一id,官方稱之為偏移量(offset)

2.無論訊息是否被消費,集群都會保留訊息,有乙個配置的時間(過期時間),超過這個時間後,訊息會被清除

3.消費端唯一記錄的元資訊就是自己在topic中的位置(offset),

4.分布式的原因:第一集群可以容納大量的資料 第二:可以並行的處理

分布式1.每乙份資料都會複製到不同的伺服器上,以便與容錯處理

2.每乙個topic的分割槽都會有乙個leader,並有零個或是多個follower,所有的讀寫請求都會經過leader來進行分發,若是leader發生錯誤的話,那麼就會有乙個follower上位成為leader

生產者producers會將資料傳送訊息到topic,傳送的目的地可以根據輪訓策略或是到指定的分割槽策略

消費者訊息一般有兩種模式,其一是佇列,另一種是發布訂閱。

佇列:有很多消費者,每乙個消費者從佇列中獲取其中乙個資料,乙個資料只被消費一次。

發布訂閱模式:將乙個消費廣播到所有的消費者,乙個資料會被消費n次。

kafka對於消費者提供了一種簡單的抽象 — 消費組。每乙個消費者都會有乙個消費組的名稱,乙個消費會發布到乙個topic上,同時遞送到訂閱了這個訊息的消費組下的所有消費者。具體如下圖所示:

若是所有的消費者都是相同的消費組,那麼就是乙個佇列模式。

若是消費者有不同的組,那麼就是發布訂閱模式,那麼消費就會遞送到所有的消費者。

通過對於消費組的名稱不同來區分了佇列和發布訂閱模式。

每乙個topic都會有一定數量的消費組,每個消費組(邏輯訂閱者)包含了多個消費者,這樣就可以保證可伸縮性金額容錯。這樣訂閱者就是乙個集群而不是單個例項。保證單點故障問題。

在強一致性上kafka同傳統的mq也在靠近。

傳統的佇列是將訊息按照儲存時候的順序進行傳送,但是有多個消費者的時候,有可能發生到底每個消費者的順序不一定,一是導致無法並行,二是導致消費的順序不一致。為了解決這個問題,通常的手段是只有乙個消費者來保證順序。

針對上面兩個問題,kafka有自己的解決方案。解決並行是將多個分割槽分別指定對應的消費者,這樣就保證了並行,同時保證了訊息消費的順序,限制是消費者的數量不能多於分割槽數目(通過配置指定).

但是這樣就只能保證乙個分割槽中的訊息是保證順序,無法保證不同分割槽的訊息的順序一致性。在大多數應用場景下,這樣是能滿足要求的,若是你要求非常強烈的一致性話,就只能單消費者了。

一致性1.topic接受到訊息並儲存到佇列中,若是收到m1,m2兩個訊息,那麼在佇列中m1的偏移量會小於m2

2.消費者看到訊息的順序就是在儲存到日誌上的順序

3.乙個topic的複製因子是n,那麼訊息會被複製到n-1伺服器上,保證訊息的不丟失

一些常見的使用場景

1.作為訊息處理系統

作用:解耦訊息的生產和處理、快取訊息以緩解對於後端處理承受的壓力

可以比較的類似產品是activemq or rabbitmq.

2.網頁行為記錄

乙個使用者的行為記錄的消費者一般是多個,可能是實時處理系統,也可能是離線處理系統,同時吞吐量非常的大,kafka就非常的適合

3.監控 對於一些監控資料的處理

4.日誌聚合方案

這個是kafka最常用的地方,用於分散到多個地方的日誌做乙個聚合,以便於後續的分析處理

5.流式處理

官方的說法是也可以把kafka當做類似strom或samza的流式處理框架來用,至於效果如何就未知

6.事件驅動架構

這種架構風格中的候選者之一

訊息框架的出現解決了很多問題,例如解耦訊息的生產和處理、快取訊息以緩解對於後端處理承受的壓力(提公升效能.不同框架的設計決定了它的適用場景,kafka的topic分割槽並行設計決定了它的高吞吐量,但是不保證順序一致性,對於feed類就不友好

其他:1.支援批量發布

2.基於tcp協議,傳輸層協議,不需要任何的語義

3.有不同客戶端實現

參考資料:

分布式訊息佇列kafka

kafka是linkedin開源的分布式發布 訂閱訊息系統 訊息佇列 kafka特點 1 高吞吐率 低延遲,每秒處理幾十萬訊息,延遲最低幾毫秒 2 可擴充套件性,支援動態擴充套件節點資料 3 永續性與可靠性,資料被持久化磁碟,支援資料多副本防止資料丟失 4 高容錯,允許節點失敗 5 高併發,支援上千...

Kafka分布式訊息佇列

可快速持久化。通過o 1 的磁碟資料結構提供訊息的持久化,這種結構對於即使數以tb的訊息儲存也能夠保持長時間的穩定性能 高吞吐量。即使是非常普通的硬體kafka也可以支援每秒數百萬的訊息 完全的分布式系統。它的broker producer consumer都原生地支援分布式,自動支援負載均衡 pa...

Kafka分布式訊息佇列框架

既有的訊息佇列框架或者對訊息傳送的可靠性提供了較高的保證,由此帶來較大的負擔,不能滿足海量高吞吐率的要求 或者完全面向實時訊息處理系統,對於批量離線處理的場合無法提供足夠的快取和永續性要求。如何實現 kafka的集群有多個broker伺服器組成,每個型別的訊息被定義為topic,同一topic內部的...