Kafka的分區副本機制

目錄

生產者的分區寫入策略

輪詢策略

隨機策略

按key分配策略

亂序分區

自定義分區策略

實現步驟:

消費者組Rebalance機制

Rebalance觸發時機

Rebalance的不良影響

消費者分區分配策略

Range范圍分配策略

RoundRobin輪詢策略

Stricky粘性分配策略


生產者的分區寫入策略

  • 輪詢策略
  • 隨機策略
  • 按key寫入策略
  • 自定義分區策略

輪詢策略

默認的策略,也是使用最多的策略,可以最大限度保證所有的消息平均分配到每一個分區。

如果在生產消息的時候,key為null,則使用輪詢算法均衡的分配分區。

隨機策略

隨機策略,就是隨機的將每條消息隨機的分配到每個分區。

按key分配策略

按key分配策略,有可能會出現數據傾斜,例如:某個key包含了大量的數據,因為key的值所有的數據都分配到了一個分區,造成分區的消息數量遠遠大于其他分區。

亂序分區

????????????????輪詢和隨機策略都會導致一個問題,就是生產到kafka的數據都是亂序存儲的,而按照key存儲的也是一定程度上的有序,也是局部有序,但又有可能導致數據傾斜,所以要結合實際情況取舍。

  • 在Kafka中生產者是有寫入策略,如果topic有多個分區,就會將數據分散在不同的partition中存儲

  • 當partition數量大于1的時候,數據(消息)會打散分布在不同的partition中

  • 如果只有一個分區,消息是有序的

自定義分區策略

實現步驟:

1.自定義分區器

public class KeyWithRandomPartitioner implements Partitioner {private Random r;@Overridepublic void configure(Map<String, ?> configs) {r = new Random();}@Overridepublic int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {// cluster.partitionCountForTopic 表示獲取指定topic的分區數量return r.nextInt(1000) % cluster.partitionCountForTopic(topic);}@Overridepublic void close() {}
}

2.在kafka生產者配置中,自定義使用自定義分區器的類名

props.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, KeyWithRandomPartitioner.class.getName());

消費者組Rebalance機制

????????Kafka的Rebalance稱之為再平衡,是kafka確保Consumer group下所有consumer如何達成一致,分配訂閱的topic的每個分區的機制。

Rebalance觸發時機

1.消費者組中consumer的個數發生變化。

例如:有新的consumer加入到消費者組,或者是某個consumer停止了。

2.訂閱的topic的個數發生變化

消費者可以訂閱多個主題,假設當前的消費者組訂閱了三個主題,但有一個主題突然被刪除了,此時也需要發生再均衡。

3.訂閱的topic分區數發生變化


Rebalance的不良影響
  1. 發生Rebalance時,consumer group下的所有consumer都會協調在一起共同參與,Kafka使用分配策略盡可能達到最公平的分配
  2. Rebalance過程會對consumer group產生非常嚴重的影響,Rebalance的過程中所有的消費者都將停止工作,直到Rebalance完成

消費者分區分配策略

Range范圍分配策略

Range范圍分配策略是Kafka默認的分配策略,它可以確保每個消費者消費的分區數量是均衡的。

注意:Rangle范圍分配策略是針對每個Topic的。

配置

算法公式

n = 分區數量 / 消費者數量

m = 分區數量 % 消費者數量

前m個消費者消費n+1個

剩余消費者消費n個

RoundRobin輪詢策略

RoundRobin輪詢策略是將消費者以及消費者的所訂閱的所有topic的所有partitions按照字典序排序(topic和分區的hashcode進行排序)。然后通過輪詢方式逐個將分區以此分配給每個消費者。

配置

配置消費者的partition.assignment.strategy為org.apache.kafka.clients.consumer.RoundRobinAssignor

Stricky粘性分配策略

從Kafka 0.11x開始,引入此類分配策略,主要目的:

  1. 分區分配盡可能均勻
  2. 在發生rebalance的時候,分區的分配盡可能與上一次分配保持相同

沒有發生rebalance時,Striky粘性分配策略和RoundRobin分配策略類似。

上面如果consumer2崩潰了,此時需要進行rebalance。如果是Range分配和輪詢分配都會重新進行分配,例如:

通過上圖,我們發現,consumer0和consumer1原來消費的分區大多發生了改變。接下來我們再來看下粘性分配策略。

????????我們發現,Striky粘性分配策略,保留rebalance之前的分配結果。這樣,只是將原先consumer2負責的兩個分區再均勻分配給consumer0、consumer1。這樣可以明顯減少系統資源的浪費,例如:之前consumer0、consumer1之前正在消費某幾個分區,但由于rebalance發生,導致consumer0、consumer1需要重新消費之前正在處理的分區,導致不必要的系統開銷。(例如:某個事務正在進行就必須要取消了)????????

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23868.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23868.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23868.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機網絡-NAT配置與ACL

目錄 一、ACL 1、ACL概述 2、ACL的作用 3、ACL的分類 4、ACL的配置格式 二、NAT 1、NAT概述 2、NAT分類 2.1 、 靜態NAT 2.2 、 動態NAT 3、NAT的功能 4、NAT的工作原理 三、NAT配置 1、靜態NAT配置 2、動態NAT配置 四、總結 一、ACL 1、ACL概述 ACL&#xff…

讓編程變得更加直觀與高效 “JAVA圖形化編程”官網上線!

公測預約開啟 我們歷經了長達三年的時光&#xff0c;執著地堅守并潛心地進行探索&#xff0c;始終懷著一顆敬畏的心&#xff0c;最終極為謹慎地推出了這款圖形化編程桌面。它能夠使得業務與程序清晰明了地呈現&#xff0c;而且還能與傳統的低零代碼平臺實現緊密…

新品發布 | 飛凌嵌入式RK3576核心板,為AIoT應用賦能

為了充分滿足AIoT市場對高性能、高算力和低功耗主控日益增長的需求&#xff0c;飛凌嵌入式全新推出基于Rockchip RK3576處理器開發設計的FET3576-C核心板&#xff01; 集成4個ARM Cortex-A72和4個ARM Cortex-A53高性能核&#xff0c;內置6TOPS超強算力NPU&#xff0c;為您的AI…

LeetCode 兩數之和 + 三數之和

兩數之和 簡單題 思路&#xff1a;一個Map&#xff0c;key是數值&#xff0c;value是該數值對應的下標&#xff0c;遍歷的時候判斷一下當前數組下標對應的值在map里有沒有可組合成target的&#xff08;具體體現為在map里找target-nums【i】)&#xff0c;如果有&#xff0c;直接…

IDEA使用阿里通義靈碼插件

在這個AI火熱的時代&#xff0c;純手工寫代碼已經有點out了&#xff0c;使用AI插件可以幫我們快速寫代碼&#xff0c;起碼能省去寫那些簡單、重復性的代碼&#xff0c;大大提高編碼效率&#xff0c;在這里我推薦使用阿里的通義靈碼 注冊安裝 安裝注冊好后&#xff0c;打開我們…

深入探索Spark MLlib:大數據時代的機器學習利器

隨著大數據技術的迅猛發展,機器學習在各行各業的應用日益廣泛。Apache Spark作為大數據處理的利器,其內置的機器學習庫MLlib(Machine Learning Library)提供了一套高效、易用的工具,用于處理和分析海量數據。本文將深入探討Spark MLlib,介紹其核心功能和應用場景,并通過…

【流媒體】音頻相關概念詳解

文章目錄 一、前言二、概述三、音頻相關概念1、采樣率&#xff08;Sampling rate&#xff09;2、位深度&#xff08;Bit depth&#xff09;3、比特率&#xff08;Bit rate&#xff09;4、聲道&#xff08;Audio channel&#xff09;5、音頻幀6、音頻編碼7、音頻解碼 一、前言 …

【vuejs】$nextTick的原理分析和使用場景

1. $nextTick 概述 Vue.js 框架中的 $nextTick 是一個非常重要的 API&#xff0c;它允許開發者延遲回調函數的執行直到下次 DOM 更新循環之后。這意味著&#xff0c;當開發者在 Vue 組件中更改了數據&#xff0c;并且想要在 DOM 更新完成后執行某些操作時&#xff0c;可以使用…

總結開發過程遇到問題有哪些渠道可以尋找解決方案

羅列一下 百度、ChatGPT/訊飛星火等AI、Stack Overflow、github isssue 平時開發過程遇到問題的主要解決方式都是百度或者詢問ChatGPT&#xff0c;當然在java中這兩個方式也能解決百分之80的問題&#xff0c;畢竟java的社區圈夠熱鬧。 如何優雅地使用 Stack Overflow 一、學…

搭建自己的DNS服務器

個人名片 &#x1f393;作者簡介&#xff1a;java領域優質創作者 &#x1f310;個人主頁&#xff1a;碼農阿豪 &#x1f4de;工作室&#xff1a;新空間代碼工作室&#xff08;提供各種軟件服務&#xff09; &#x1f48c;個人郵箱&#xff1a;[2435024119qq.com] &#x1f4f1…

腺苷調節合成高密度脂蛋白用于三陰性乳腺癌的化學免疫治療

引用信息 文 章&#xff1a;Adenosine-modulating synthetic high-density lipoprotein for chemoimmunotherapy of triple-negative breast cancer 期 刊&#xff1a;Journal of Controlled Release&#xff08;影響因子&#xff1a;10.8&#xff09; 發表時間&am…

深入探索:十種流行的深度神經網絡及其運作原理

算法 深入探索&#xff1a;十種流行的深度神經網絡及其運作原理一、卷積神經網絡&#xff08;CNN&#xff09;基本原理工作方式 二、循環神經網絡&#xff08;RNN&#xff09;基本原理工作方式 三、長短期記憶網絡&#xff08;LSTM&#xff09;基本原理工作方式 四、門控循環單…

jupyter notebook默認工作目錄修改

jupyter notebook默認工作目錄修改 1、問題2、如何修改jupyter notebook默認工作目錄 1、問題 anaconda安裝好之后&#xff0c;我們啟動jupyter notebook會發現其默認工作目錄是在C盤&#xff0c;將工作目錄放在C盤會讓C盤很快被撐爆&#xff0c;我們應該將jupyter notebook默…

進階篇01——存儲引擎

MySQL體系結構 存儲引擎 引擎有多種類型&#xff0c;MySQL支持多種存儲引擎&#xff0c;默認的存儲引擎為innodb。不同的存儲引擎有不同的特點&#xff0c;適用不同的場景。 innodb存儲引擎 簡介 innodb的邏輯存儲結構 MYISAM存儲引擎 memory存儲引擎 三種引擎特點對比&…

2024華為數通HCIP-datacom最新題庫(變題更新③)

請注意&#xff0c;華為HCIP-Datacom考試831已變題 請注意&#xff0c;華為HCIP-Datacom考試831已變題 請注意&#xff0c;華為HCIP-Datacom考試831已變題 近期打算考HCIP的朋友注意了&#xff0c;如果你準備去考試&#xff0c;還是用的之前的題庫&#xff0c;切記暫緩。 1、…

融合創新:Web3如何重新定義網絡生態

隨著區塊鏈技術的不斷發展和Web3時代的到來&#xff0c;我們正在見證著互聯網生態的巨大變革。Web3將傳統的互聯網架構轉變為去中心化、開放、透明的新網絡生態&#xff0c;為創新和合作提供了全新的可能性。本文將深入探討Web3如何重新定義網絡生態&#xff0c;探索融合創新的…

Flutter中防抖動和節流策略

什么是防抖和節流&#xff1f; 函數節流&#xff08;throttle&#xff09;與 函數防抖&#xff08;debounce&#xff09;都是為了限制函數的執行頻次&#xff0c;以優化函數觸發頻率過高導致的響應速度跟不上觸發頻率&#xff0c;出現延遲&#xff0c;假死或卡頓的現象 是應對頻…

WeTrade亮相Traders Fair展會菲律賓站

2024年5月25日&#xff0c;菲律賓交易博覽會在馬尼拉的Edsa香格里拉酒店圓滿落幕。 WeTrade作為本次交易博覽會的重要戰略合作伙伴、參展商和贊助商&#xff0c;吸引了全球各界人士的廣泛關注。 現場&#xff0c;我們的菲律賓團隊與客戶進行了親密的面對面交流&#xff0c;并…

優思學院|精益生產學習過程中如何提高自己的能力水平?

精益生產是一項實踐多過理論的課題。 優思學院認為實踐并不限于實際的工作&#xff0c;日常的思考同樣重要&#xff0c;例如我們會要求學員在學習時不斷思考各種事物&#xff0c;不限于自己的企業。例如當你去到一家餐廳&#xff0c;你能夠觀察到什么浪費&#xff1f;你可否把…

Docker pull鏡像一直在Waiting無法下載,根本解決方法

1、現象描述&#xff1a; docker pull 拉去鏡像一直在等待&#xff0c;無法下載&#xff0c;最后失敗如下&#xff1a; [rootlocalhost docker]# docker pull zookeeper Using default tag: latest latest: Pulling from library/zookeeper 2ec76a50fe7c: Retrying in 1 seco…