1、kafka架構
producer:訊息生產者,也就是向broker傳送訊息的客戶端;
consumer:訊息消費者,向broker消費資料的客戶端;
consumer group(gc):消費者組,也就是由多個消費者組成的。消費者組內的每個消費者負責消費不同分割槽的資料,乙個分割槽只能由乙個組內的消費者消費,消費者組間互不影響;
broker:一台kafka伺服器就是乙個broker,乙個集群由多個broker組成,同時乙個broker由多個topic組成;
topic:可以理解我乙個佇列,生產者和消費者面對的都是乙個topic;
partition:為了實現可擴充套件性,乙個非常大的topic可以分布在多個broker上,乙個topic可以分為多個partition;
replica:副本,為了保證集群上某個節點發生故障時,該節點上分割槽資料不會丟失,且kafka仍能夠正常工作,每個分割槽可以有若干個副本,乙個leader和多個follower;
leader:每個分割槽多個副本的頭頭,生產者傳送資料的物件以及消費者消費資料的物件都是leader;
follower:每個分區內leader的跟班,負責實時同步leader的資料,與leader保持一致,當leader發生故障時,會從follower中選擇乙個成為新的leader。
2、kafka壓測
kafka官方自帶了壓力測試指令碼,可以檢視哪個地方出現瓶頸(cpu,記憶體,網路io),一般是網路io出現瓶頸。指令碼在/opt/module/kafka/bin目錄下。
3、kafka的機器數量
數量=2*(峰值生產速度*副本數/100)+1
4、kafka日誌儲存的時間
3天5、kafka硬碟大小
大小=每日資料量*3天/70%
6、kafka監控器
kafka manager
7、kafka分割槽數設定
建立乙個只有乙個分割槽的topic,測試這個topic的producer和consumer的吞吐量,假設他們的值分別為tp和tc,單位為mb/s,總的目標吞吐量為tt,那麼分割槽數=tt/min(tp,tc)。
8、kafka丟不丟資料
kafka丟不丟資料和ack有關。
ack=0,producer不等待broker返回ack,優點是提供了最低的延遲,broker一接受到資料還沒寫入磁碟就已經返回,當broker出現故障時,有可能丟失資料;
ack=1,producer等待broker返回ack,leader在落盤成功後會返回ack,如果在follower同步完成之前leader發生故障,可能會丟失資料;
ack=-1,producer等待broker返回ack,leader以及follower會在全部落盤成功後返回ack,不會丟失資料。但是存在乙個問題,如果在follower同步完成之後,broker傳送ack之前,leader發生故障,那麼會造成資料重複。
9、isr副本同步佇列
isr中包括leader和follower。如果leader程序掛掉,會在isr佇列中選擇乙個服務作為新的leader。在0.10版本前有replica.lag.max.messages(延遲條數)和replica.lag.time.max.ms(延遲時間)兩個引數決定一台服務是否可以加入isr副本佇列,在0.10版本移除了延遲條數這一引數,防止服務頻繁的進去佇列。
任何乙個維度超過閾值都會吧follower剔除出isr,存入osr(outof-sync replicas)列表,新加入的follower也會現存放入osr中。
10、分割槽分配策略
kafka有兩種分割槽分配策略:range、roundrobin。
range:range是預設策略。range是對每乙個topic而言的。首先是對同乙個topic裡面的分割槽按照序號進行排序,並對消費者按照字母順序進行排序。然後用partition分割槽的個數除以消費者匯流排程數來決定每個消費者執行緒消費幾個分割槽。如果除不盡,那麼前面幾個消費者執行緒將會多消費乙個分割槽。
例如,假如有10個分割槽,兩個消費者組(c1、c2),三個消費者執行緒,10/3=3…1除不盡,那麼分割槽分配
c1-0:0,1,2,3
c1-1:4,5,6
c2-0:7,8,9
roundrobin:將所有主題的分割槽組成topicandpartition列表,然後對topicandpartition列表按照hashcode進行排序,最後按照輪詢方法發給每乙個消費者執行緒。
11、kafka消費能力不足以及資料積壓
如果消費能力不足,則可以考慮增加topic的分割槽數,並提高消費者數量,消費者數=分割槽數(兩者缺一不可)
如果是下游的資料處理不及時:提高每批次拉去的數量。批次拉取資料過少(拉取速度/處理時間《生產速度),使處理的資料小於生產的資料,也會造成資料積壓。
12、kafka冪等性
producer的冪等性指的是當傳送同一條資訊是,資料在server端只會被持久化一次,資料不丟不重。但冪等性有條件:
(1)只能保證producer在單個會話內不丟不重,如果producer出現意外掛程式掉再重啟是無法保證的(冪等性情況下,是無法獲取之前的狀態資訊,因此是無法做到跨會話級別的不丟不重)。
(2)冪等性不能跨多個topic-partition,只能保證單個partition內的冪等性,當涉及多個topic-partition,這中間的狀態並沒有同步。
13、kafka事務(0.11版本開始)
kafka從0.11版本開始引入了事務支援。事務可以保證kafka在exactly once語義的基礎上,生產和消費可以跨分割槽和會話,要麼全部成功,要麼全部失敗。
1)producer事務
為了實現跨分割槽跨會話的事務,需要引入乙個全域性唯一的transaction id,並將producer獲得的pid和transaction id繫結。這樣當producer重啟後就可以通過正在進行的transaction id獲得原來的pid。
為了管理transaction,kafka引入了乙個新的元件transaction coordinator。producer就是通過和transaction coordinator互動獲得transaction id對應的任務狀態。transaction coordinator還負責將事務所有寫入kafka的乙個內部topic,這樣即使整個服務重啟,由於事務狀態得到儲存,進行中的事務狀態可以得到恢復,從而繼續進行。
2)consumer事務
上述事務機制主要是從producer方面考慮,對於consumer而言,事務的保證就會相對較弱,尤其時無法保證commit的資訊被精確消費。這是由於consumer可以通過offset訪問任意資訊,而且不同的segment file生命週期不同,同一事務的訊息可能會出現重啟後被刪除的情況。
14、kafka資料重複15、kafka高效讀取資料
(1)kafka本身是分布式集群,同時採用分割槽技術,併發度高;
(2)順序寫磁碟
kafkade的producer生產資料,要寫入log檔案中去,寫的過程是一直追加到檔案末端,為順序寫。這與磁碟的機械結構有關,因為省去了大量磁頭定址的時間。
(3)零複製技術
16、zookeeper在kafka中的作用
kafka集群中有個broker會被選舉為controller,負責管理集群broker的上下線,所有的topic的分割槽副本分配和leader選舉工作。這個controller依賴於zookeeper。
kafka系列教程01 如何學習kafka
資料流,如訊息傳遞系統 高效並實時 資料流安全地在分布式集群中複製儲存 kafka是用於構建實時資料管道和流應用程式。具有橫向擴充套件,容錯,wicked fast 快 等優點,並已在成千上萬家公司執行。apache kafka是訊息中介軟體的一種,我發現很多人不知道訊息中介軟體是什麼,在開始學習之...
學習筆記 Kafka
kafka kafka把資料往磁碟上寫,但是在磁碟上存它的讀寫速度比記憶體快,這個依賴於預讀和後寫功能,但是這個預讀和後寫必須是按照順序的方式,若沒有順序的方式優化的話,不存在什麼預讀和後寫。特點 訊息持久化 能落到磁碟 通過o 1 的磁碟資料結構提供資料的持久化 高吞吐量 分布式 擴充套件能力強 ...
Kafka學習筆記
1.1簡介 apache kafka 是分布式發布 訂閱訊息系統 訊息中介軟體 它最初由 linkedin 公司開發,之後成為 apache 專案的一部分。kafka 是一種快速 可擴充套件的 設計內在就是分布式的,分割槽的和可複製的提交日誌服務。apache kafka 與傳統訊息系統相比,有以下...