深入學習 Kafka(2)- Partition 和 Topic

1. Partition的作用

在這里插入圖片描述

Topic是邏輯的概念,Partition是物理的概念:

  • Partition 對一個 Topic 的消息進行物理上的分離,讓消息可以分布在不同的實體機器上,可以提升系統吞吐量和并行處理能力。
  • 每個Partition可以有多個副本(Leader和Follower),Leader負責讀寫操作,Follower負責數據同步。將消息備份在副本中,可以確保高可用性。

舉個例子,更形象的理解Partition 和 Topic:

  • Topic 比作高速公路,不同的 Topic就是不同的高速公路
  • Partition 比作車道,有的公路是 3 車道,有的是 4 車道,車道可以提升公路的運輸能力

Partition的目的是:通過多Partition實現負載均衡的效果,提高kafka集群的吞吐率。

2. 消息寫入Partition

在這里插入圖片描述
一個 Topic 有多個 Partition,生產者向一個 Topic 中發送消息的時候,有3種寫入方式:

  1. kafka默認輪詢規則
  2. producer指定partition key寫入特定的partition
  3. producer自定義規則

3. 消息消費

假設主題T1有四個分區。

3.1 一個消費群組

3.1.1 partition數量 > 消費者數量
只有一個消費者時,消費者1將收到所有分區的全部消息。
在這里插入圖片描述
當有兩個消費者時,每個消費者將分別從兩個分區接受消息。
在這里插入圖片描述
3.1.2 partition數量 = 消費者數量
當有四個消費者時,每個消費者都可以接受一個分區的消息。
在這里插入圖片描述

3.1.3 partition數量 < 消費者數量
當有五個消費者時,會有閑置的消費者。
在這里插入圖片描述

3.2 多個消費群組

消費者群組之間是互不影響的:
在這里插入圖片描述

4. 分區分配策略

Kafka的分區分配策略決定了如何將Topic的各個Partition分配給消費者組內的消費者,以實現消息的并行消費。這些策略通過配置參數partition.assignment.strategy來指定。主要的分區分配策略包括:

  • RangeAssignor(范圍分配器):
    Kafka的默認分區分配策略。它首先將所有Partitions按分區編號排序,然后將消費者按字母順序排序。之后,將Partitions均勻地“分配”給消費者,盡量使每個消費者分配到連續的Partition區間。這種方式有利于保持消息的順序性,特別是在消費者組中的消費者數量少于或等于分區數時。
  • RoundRobinAssignor(輪詢分配器):
    這種策略將分區在消費者間進行輪詢分配,確保每個消費者盡可能平均地獲得相同數量的Partitions。相比RangeAssignor,它不保證分區的連續性,但能更好地分散負載,尤其是在消費者數量遠大于分區數的情況下。
  • StickyAssignor(粘性分配器 / 粘性分配策略):
    引入于Kafka 0.10.1版本,這是一種更高級的分配策略,旨在結合RangeAssignor和RoundRobinAssignor的優點。它試圖在重新平衡時保持分配的穩定性(即盡量保持之前分配給消費者的Partitions不變),同時確保分區盡可能均勻地分布在消費者之間。這種策略減少了頻繁的rebalance操作導致的性能開銷,提高了整體的穩定性。

5. 分區Rebalance

觸發分區分配策略的情景:

  1. 消費者組成員變化:當有新的消費者加入或已有消費者離開消費者組時,會觸發重新分配。
  2. 訂閱列表變化:如果消費者修改了其訂閱的Topic列表,也會引起分配策略的重新執行。
  3. Broker或Partition變化:Kafka集群的Broker增加、減少或Topic的分區數發生變化時,需要重新分配分區。
  4. Session超時:消費者長時間未發送心跳給組協調者(通常由Zookeeper或Kafka自身的GroupCoordinator服務擔任),被視為已離線,從而觸發再平衡。
  5. 手動觸發:在某些情況下,管理員或應用程序可以通過API調用來手動觸發消費者的再平衡。

每次觸發Rebalance時,Kafka會依據配置的分區分配策略重新計算分區到消費者的映射關系,以達到最佳的負載均衡狀態。但是也會消耗大量網絡資源和CPU資源,導致在Rebalance期間消費性能下降、集群不穩定,可能導致消息延遲、消息擠壓、消息重復消費等異常。為了緩解上述問題,通常采取的措施包括優化Rebalance觸發條件、合理配置消費者參數、使用更高效的分區分配策略(如StickyAssignor)、以及確保消費者及時提交偏移量等

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

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

相關文章

交換機06_vlantrunk

一、虛擬局域網vlan 目的&#xff1a;劃分廣播域 思科設備如何去配置vlan 創建vlan設置對應的接口模式將接口加入vlan全局模式配置vlan vlan 2 設置接口模式&#xff08;目前需要將接口加入對應vlan&#xff0c;一般用于連接PC&#xff09; en conf t int f0/0 switchport m…

SAP S/4 FICO批量創建銀行主數據(銀行主數據/賬戶主數據)開發說明書(包括測試樣例、程序代碼僅作參考,不保證一定可以運行)

開發通用說明 新增程序——批導工具處理邏輯如下:自定義批導程序():點擊“執行”按鈕若數據錯誤或重復,先檢查導入的銀行賬號是否已在系統中存在,若已存在則狀態顯示為紅燈,并在消息反饋列提示“該銀行已經存在”。查重后若銀行賬戶為新增賬戶,但導入模板提供的數據有缺…

Spring Boot中獲取請求參數的幾種方式詳解

Spring Boot中獲取請求參數的幾種方式詳解 在Web開發中&#xff0c;處理HTTP請求是一項基本且核心的任務。Spring Boot作為目前最流行的Java Web開發框架之一&#xff0c;提供了多種簡便的方式來獲取和處理請求參數。本文將深入探討在Spring Boot中獲取請求參數的幾種方式&…

學會python——用python編寫一個計算機程序(python實例十六)

目錄 1.認識Python 2.環境與工具 2.1 python環境 2.2 Visual Studio Code編譯 3.編寫計算器程序 3.1 代碼構思 3.2 代碼實例 3.3 運行結果 4.總結 1.認識Python Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。 Python 的設計具有很強的可讀…

【C語言】刷題筆記 Day1

多刷題 多思考 【題目1】 實現字母的大小寫轉換&#xff0c;實現多組輸入輸出 1. getchar 為輸入函數&#xff0c;EOF&#xff08;end of file&#xff09;為文件結束標志&#xff0c;通常為文件結束的末尾。 2. 題目中要求實現多組輸入輸出&#xff0c;那我們用 while 循…

RH442 計算機測量單位的換算

計算機測量單位的換算 計算機測量單位的換算 計算機測量單位的換算 在本練習中&#xff0c;您要將性能指標從一個單位換算成另一個單位。 成果 您要學會性能指標單位的換算。 以 student 用戶登錄 workstation 虛擬機&#xff0c;密碼為 student。 在 workstation上運行 l…

初步認識 B樹(B-tree)

定義 B樹&#xff08;B-tree&#xff09;是一種自平衡的多路搜索樹&#xff0c;廣泛應用于數據庫和文件系統的索引結構中。它能夠保持數據有序&#xff0c;同時提供高效的插入、刪除和查找操作。 一、基本概念 定義&#xff1a;B樹是一種自平衡的樹結構&#xff0c;能夠保持…

python+django 環境搭建以及post接口封裝

1、搭建pythondjango環境 python 3.7.9的版本 具體參考之前的安裝教程 django 使用 pip install django 會自動安裝 檢驗安裝版本&#xff1a; python -m django --version 2、創建django項目 django-admin startproject projectname 啟動項目&#xff1a;python manage.py…

011-GeoGebra基礎篇-驗證泰勒斯定理(動點在指定曲線上移動)

注意咯&#xff0c;如果說前期的文章隨便看看就行&#xff0c;但從這篇往后的內容&#xff0c;則需要君略微動動brain了。當然&#xff0c;后續的文章如果感覺吃力的話&#xff0c;可以看看本專欄序號比較小的文章&#xff0c;可能會對你開卷有益。 若A, B, C是圓周上的三點&am…

Windows PowerShell 添加新配置文件(打開對應的目錄,并執行命令)

%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe ./redis-server.exe %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe yarn dev 人工智能學習網站 https://chat.xutongbao.top

數據分析如何在企業中發揮價值

數據分析如何在企業中發揮價值 數據分析的目的是什么為什么怎么做做什么 思考問題流程確認問題拆解問題量化分析 分析數據流程收集數據處理數據制作圖表 全流程 數據分析的目的 是什么 通過數據量化企業當前的經營現狀或業務事實&#xff0c;將業務細節轉換為具體數據&#xf…

通過容器啟動QAnything知識庫問答系統

QAnything (Question and Answer based on Anything) 是致力于支持任意格式文件或數據庫的本地知識庫問答系統&#xff0c;可斷網安裝使用。目前已支持格式&#xff1a;PDF(pdf)&#xff0c;Word(docx)&#xff0c;PPT(pptx)&#xff0c;XLS(xlsx)&#xff0c;Markdown(md)&…

LabVIEW汽車轉向器測試系統

紹了一種基于LabVIEW的汽車轉向器測試系統。該系統集成了數據采集、控制和分析功能&#xff0c;能夠對轉向器進行高效、準確的測試。通過LabVIEW平臺&#xff0c;實現了對轉向器性能參數的實時監測和分析&#xff0c;提升了測試效率和數據精度&#xff0c;為汽車轉向器的研發和…

CAM350刪除鋪銅?

CAM350刪除鋪銅&#xff1f; 1、選擇菜單欄Add 2、選擇Polygon Void→Line... 3、然點擊需要操作的銅箔&#xff0c;使其高亮 4、用鼠標框選需要刪除的部分&#xff0c;然后右擊 5、刪除后如下圖所示 The Layer Bar controls are part of the new Navigation Pane and can also…

OpenStack開源虛擬化平臺(二)

目錄 三、對象存儲服務Swift&#xff08;一&#xff09;Swift特性&#xff08;二&#xff09;應用場景&#xff08;三&#xff09;Swift主要組件&#xff08;四&#xff09;Swift基本原理&#xff08;五&#xff09;實例分析 四、鏡像服務Glance&#xff08;一&#xff09;Glan…

JAVA-Redis數據結構—跳躍表(Skiplist)【包含Java實現詳情代碼】

本人詳解 作者:王文峰,參加過 CSDN 2020年度博客之星,《Java王大師王天師》 公眾號:JAVA開發王大師,專注于天道酬勤的 Java 開發問題中國國學、傳統文化和代碼愛好者的程序人生,期待你的關注和支持!本人外號:神秘小峯 山峯 轉載說明:務必注明來源(注明:作者:王文峰…

CAAC無人機執照:視距內駕駛員與超視距駕駛員區別詳解

CAAC無人機執照中的視距內駕駛員與超視距駕駛員在多個方面存在顯著的區別。以下是詳細的對比和解釋&#xff1a; 1. 定義與操作范圍&#xff1a; - 視距內駕駛員&#xff08;駕駛員證&#xff09;&#xff1a;操作無人機時&#xff0c;無人機必須在操控員的視線范圍內&#xff…

數據開源|GigaSpeech 2:三萬小時東南亞多語種語音識別開源數據集發布

“Giga”一詞源于“gigantic”&#xff0c;互聯網上具有海量音頻資源&#xff0c;但語音質量良莠不齊&#xff0c;高質量音頻文本對數據十分稀缺且標注成本高昂&#xff0c;特別是在小語種領域。GigaSpeech 是一個非常成功的英文開源數據集&#xff0c;以 YouTube 和 Podcast 為…

[數據庫原理]關系范式總結(自用)

如有錯誤&#xff0c;歡迎指正&#xff01;&#xff01;&#xff01; 有一些題目我放在pdf里面了

解釋 Java 中的封裝、繼承和多態性,并舉例說明相關概念

在Java編程的世界里&#xff0c;封裝、繼承和多態是面向對象編程&#xff08;OOP&#xff09;的三大基石&#xff0c;它們支撐起整個Java程序設計的骨架&#xff0c;讓代碼更加靈活、可擴展和易于維護。 接下來&#xff0c;我會用一種輕松的方式&#xff0c;并通過一個貼近生活…