【
這個應該算是之前比較火熱的詞了,一直沒時間抽出來看看。乙個新東西出來,肯定是為了解決某些問題,不然不會有它的市場。先簡單看下。
官方介紹:分布式、分割槽、支援複製的日誌提交系統
適用場景:顧名思義,特別適合用於系統日誌的非同步記錄,對於資料穩定性、一致性、可靠性要求不高的場景,追求的是高吞吐量。非傳統的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內部的...