柚子快報激活碼778899分享:分布式 Kafka基本概念
柚子快報激活碼778899分享:分布式 Kafka基本概念
目錄
1. 生產(chǎn)者
2. 主題
3. 分區(qū)
4. 消費者
5. 消費者組
?消費者組加入和離開消費者組流程
1. 消費者加入消費者組
2. 消費者離開消費者組
批處理
1. 生產(chǎn)者端的批量處理
2. 消費者端的批量處理
Kafka是消息中間件的一種,相較于其他消息中間件,其以極高的吞吐量聞名,常用于構建實時數(shù)據(jù)管道和流應用,能夠處理高吞吐量的數(shù)據(jù)流。以下是Kafka中的重要概念:
1. 生產(chǎn)者
生產(chǎn)者是向Kafka主題發(fā)送消息的客戶端。生產(chǎn)者負責將Kafka寫入數(shù)據(jù),消息的分區(qū)策略(如基于消息鍵、輪詢或自定義分區(qū)邏輯)以及將數(shù)據(jù)寫入Kafka的哪個主題,這些都由生產(chǎn)者的配置決定來決定。
2. 主題
所有消息中間件都有一種傳輸消息的結構,kafka中傳輸消息的結構為主題,消息的傳輸以主題為單位,由生產(chǎn)者將數(shù)據(jù)寫入特定的主題,在由消費者由特定的主題取出,即可完成一次消息的傳輸。
3. 分區(qū)
為了提高數(shù)據(jù)進入主題的速度,Kafka將一個主題細分為多個區(qū),每個區(qū)都是一個獨立的線程,可以獨立接受生產(chǎn)者生產(chǎn)的消息,這樣大大提高了客戶端向Kafka傳輸數(shù)據(jù)的速度。
4. 消費者
消費者是從Kafka主題中獲取消息的客戶端。消費者通常會訂閱一個或多個主題,然后從中獲取消息并進行處理。消費者可以獨立工作,也可以作為消費者組的一部分共同消費數(shù)據(jù)。
消費者從Kafka消費數(shù)據(jù)時,獲取完數(shù)據(jù)后,數(shù)據(jù)并不會消失,消息依舊存儲在Kafka主題中。消費者能夠在下一次消費時繼續(xù)消費后續(xù)數(shù)據(jù),這是得益于Kafka內(nèi)部維護的特殊主題__consumer_offsets,該主題記錄了每個消費者組的分區(qū)和其偏移量之間的關系(單個獨立的消費者自己屬于一個消費者組)。在每次消費之前,消費者會從__consumer_offsets主題中查找自己所屬的消費者組的分區(qū)的偏移量,并從對應的位置開始消費。消費完成后,消費者會更新這些偏移量并提交到__consumer_offsets主題中。
這也意味著多個消費者組可以同時消費同一個主題而互不干擾,因為每個消費者組在__consumer_offsets主題中都有獨立的偏移量記錄。因此,即使多個消費者組同時消費同一主題,它們也不會相互影響,各自消費的數(shù)據(jù)流是獨立的。
偏移量是消息在分區(qū)中的唯一標識符。每個分區(qū)內(nèi)的消息都有一個連續(xù)的偏移量,當消費者從分區(qū)中拉取消息時,它會記錄已經(jīng)消費到的最新偏移量,確保下一次消費時能夠繼續(xù)從上次的位置開始。
5. 消費者組
Kafka通過分區(qū)提高一個主題數(shù)據(jù)寫入的速度,而消費者組則是Kafka用來提高數(shù)據(jù)獲取速度的手段,消費者組通過建立一個多個消費者的組通過使用__consumer_offsets主題中同一個偏移量,共同消費一個主題,以提高數(shù)據(jù)消費的速度。
?消費者組加入和離開消費者組流程
1. 消費者加入消費者組
新消費者實例啟動:一個新的消費者實例啟動,并使用與現(xiàn)有消費者相同的group.id(即消費者組ID)。這個新消費者會向Kafka的消費者組協(xié)調(diào)器發(fā)送一個加入請求,表明它想加入這個消費者組。分區(qū)重新平衡:一旦新的消費者加入,消費者組內(nèi)的所有分區(qū)可能會被重新分配。Kafka會嘗試將主題的分區(qū)在消費者組中的所有消費者之間重新分配,以平衡負載。例如,如果一個消費者組有6個分區(qū),原本有2個消費者在處理這些分區(qū),Kafka的消費者組協(xié)調(diào)器會將每三個分區(qū)分配給一個消費者,當加入一個新的消費者后,這6個分區(qū)就會被重新分配到3個消費者,每個消費者處理2個分區(qū)。新的分配通知:重新平衡后,消費者組協(xié)調(diào)器會通知每個消費者它現(xiàn)在負責的分區(qū)。新加入的消費者會開始從它被分配到的分區(qū)中消費消息。
2. 消費者離開消費者組
消費者實例停止:一個消費者實例停止運行、崩潰、或由于網(wǎng)絡問題與Kafka斷開連接。此時,該消費者將離開消費者組。分區(qū)重新分配:消費者離開消費者組后,消費者組協(xié)調(diào)器會觸發(fā)重新平衡過程,將離開消費者原本負責的分區(qū)重新分配給剩余的消費者。這確保了所有分區(qū)都有消費者來處理。其他消費者的負載增加:重新平衡后,剩下的消費者會接手離開消費者的分區(qū),從而增加它們的處理負載。
Kafka通過分區(qū)和消費者組大大提高了數(shù)據(jù)寫入和讀取的速度,除了提高并發(fā)以外,吞吐量的提高還要關注帶寬和磁盤IO速率,如果網(wǎng)絡傳輸數(shù)據(jù)或磁盤存取的速度不夠快,即使并發(fā)量再多,也無法提高性能。但是這兩者屬于客觀因素,kafka本身不能控制,那么kafka如何在固定帶寬和磁盤IO速率的情況下,傳輸更多的數(shù)據(jù)呢?答案是批處理。
批處理
Kafka為了提高吞吐量,通常會使用**批量處理(batching)**的方式來發(fā)送和接收消息。這種機制在生產(chǎn)者和消費者兩端都有體現(xiàn)。下面詳細解釋一下這種機制以及它如何提高Kafka的吞吐量。
1. 生產(chǎn)者端的批量處理
當生產(chǎn)者發(fā)送消息時,Kafka允許生產(chǎn)者將多個消息批量打包在一起,然后作為一個單元發(fā)送到Kafka。生產(chǎn)者會將消息暫時存儲在一個緩沖區(qū)中,當緩沖區(qū)達到一定的大小(由配置參數(shù)決定),或者等待時間達到一個預設的閾值時(如配置的linger.ms參數(shù)),生產(chǎn)者會將緩沖區(qū)中的消息打包成一個批次,發(fā)送到Kafka broker。
通過這種方式,消息一次性發(fā)送到服務器,節(jié)省了網(wǎng)絡請求次數(shù),也節(jié)省了磁盤IO過程中的系統(tǒng)調(diào)用次數(shù),提高了Kafka的性能。
2. 消費者端的批量處理
在消費者端,Kafka同樣允許消費者批量拉取消息,即每次從Kafka broker獲取一批消息,而不是每次只獲取一條消費者可以設置每次拉取的消息數(shù)量上限,從而在單次請求中獲得多個消息。
消費者批量拉取數(shù)據(jù)同樣節(jié)省網(wǎng)絡請求次數(shù),節(jié)省磁盤IO過程中的系統(tǒng)調(diào)用。
批量處理雖然能夠顯著提高吞吐量,但也引入了一定的延遲。例如,如果生產(chǎn)者為了等待更多的消息來填滿批次而延遲發(fā)送,那么這段等待時間會引入額外的延遲。實際生產(chǎn)過程中需要開發(fā)者自行調(diào)整配置,權衡性能和延遲。
Kafka性能非常優(yōu)越,但這也意味著它會消耗大量的資源,包括帶寬、內(nèi)存、CPU和磁盤資源。由于Kafka的復雜性和高性能需求,它的運維難度較大,運維人員需要在實際服務器環(huán)境中進行配置調(diào)整,以適應具體的使用場景和環(huán)境。
柚子快報激活碼778899分享:分布式 Kafka基本概念
相關閱讀
本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權,聯(lián)系刪除。