kafka入门(八):kafka分区分配策略

kafka分区分配策略 参数:

Kafka提供了消费者客户端参数partition.assignment.strategy来设置消费者与订阅主题之间的分区分配策略。

默认情况下,此参数的值为 org.apache.kafka.clients.consumer.RangeAssignor,即采用RangeAssignor分配策略。除此之外,Kafka还提供了另外两种分配策略:RoundRobinAssignor 和 StickyAssignor。

RangeAssignor 分配策略

RangeAssignor 分配策略的原理是按照消费者总数和分区总数进行整除运算来获得一个跨度,然后将分区按照跨度进行平均分配,以保证分区尽可能均匀地分配给所有的消费者

对于每一个主题,RangeAssignor策略会将消费组内所有订阅这个主题的消费者按照名称的字典序排序,然后为每个消费者划分固定的分区范围,如果不够平均分配,那么字典序靠前的消费者会被多分配一个分区

假设n=分区数/消费者数量,m=分区数%消费者数量,那么前m个消费者每个分配n+1个分区,后面的(消费者数量-m)个消费者每个分配n个分区。前m个消费者,相当于是除不尽的余数,特殊分配多一个分区。

假设消费组内有2个消费者C0和C1,都订阅了主题t0和t1,并且每个主题都有3个分区,

那么订阅的所有分区可以标识为:t0p0、t0p1、t0p2、t1p0、t1p1、t1p2。

最终的分配结果为:

消费者c0: t0p0、t0p1、t1p0、t1p1

消费者c1: t0p2、t1p2

分区数为3,消费者数量为2,n=3/2 =1,m=3%2=1。前m个消费者每个分配n+1个分区,后面的(消费者数量-m)个消费者每个分配n个分区。

可以明显地看到这样的分配并不均匀,如果将类似的情形扩大,则有可能出现部分消费者过载的情况。

RoundRobinAssignor分配策略

RoundRobinAssignor分配策略的原理是将消费组内所有消费者及消费者订阅的所有主题的分区按照字典序排序,然后通过轮询方式逐个将分区依次分配给每个消费者

假设消费组内有3个消费者(C0、C1和C2),它们共订阅了3个主题(t0、t1、t2),这3个主题分别有1、2、3个分区,即整个消费组订阅了t0p0、t1p0、t1p1、t2p0、t2p1、t2p2这6个分区。

具体而言,消费者C0订阅的是主题t0,消费者C1订阅的是主题t0和t1,消费者C2订阅的是主题t0、t1和t2,

那么最终的分配结果为:

消费者c0: t0p0

消费者c1: t1p0

消费者c2: t1p1, t2p0,t2p1, t2p2

RoundRobinAssignor策略也不是十分完美,这样分配其实并不是最优解,因为完全可以将分区t1p1分配给消费者C1。

StickyAssignor 分配策略

主要有两个目的: (1)分区的分配要尽可能均匀。 (2)分区的分配尽可能与上次分配的保持相同。

如同其名称中的“sticky”一样,让分配策略具备一定的“黏性”,尽可能地让前后两次分配相同,进而减少系统资源的损耗及其他异常情况的发生

如果发生分区重分配,那么对于同一个分区而言,有可能之前的消费者和新指派的消费者不是同一个,之前消费者进行到一半的处理还要在新指派的消费者中再次复现一遍,这显然很浪费系统资源。StickyAssignor 分配策略如同其名称中的“sticky”一样,让分配策略具备一定的“黏性”,尽可能地让前后两次分配相同,进而减少系统资源的损耗及其他异常情况的发生。

自定义分区分配策略

不仅可以任意选用Kafka提供的3种分配策略,还可以自定义分配策略来实现更多可选的功能。

自定义的分配策略必须要实现 org.apache.kafka.clients.consumer.internals.PartitionAssignor接口。

kafka入门文章

https://blog.csdn.net/sinat_32502451/category_12465196.html

资料来源:

《深入理解Kafka:核心设计与实践原理》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/644074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【服务器】安装宝塔面板

目录 🌺【前言】 🌼【前提】连接服务器 🌷方式一 使用工具登录服务器如Xshell 🌷方式二 阿里云直接连接 🌼 1. 安装宝塔 🌷获取安装脚本 方式一 使用下面提供的脚本安装 方式二 使用官网提供的脚本…

notepad++ v8.5.3 安装插件,安装失败怎么处理?下载进度为0怎么处理?

notepad v8.5.3 安装插件,安装失败?下载进度为0,怎么处理? 安装 进度 进度条没有进度 ,然后就退出了,自动打开程序,不知道什么问题,插件管理下面也没有插件显示 找到问题了&#x…

2024年最全春节攻略,外贸人看这一篇就够了

凡事预则立,不预则废--《礼记•中庸》 不知不觉春节将至,很多外贸公司以及工厂也都公布了放假时间,虽然放假时间有长有短。很多人应该都有点迫不及待想要快点放假,回家过春节。春节毕竟是我们每年最重大的节日,也是家…

梯度下降算法实现原理

文章目录 什么是梯度梯度下降算法(通过迭代解决目标函数最小值)代码实现拓展: 什么是梯度 在了解梯度之前,我们先了解一下导数: 用于描述曲线变换快慢的一个量,在几何意义上表示为函数的斜率,数学定义为: f ′ ( x ) lim ⁡ △ x → 0 f ( x △ x ) − f ( x ) △ x f(x) \…

【Python进阶编程】python编程高手常用的设计模式(持续更新中)

Python编程高手通常熟练运用各种设计模式,这些设计模式有助于提高代码的可维护性、可扩展性和重用性。 以下是一些Python编程高手常用的设计模式: 1.单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供全局…

Taro框架如何抹平各端的差异

Taro 是一款开源的跨端统一开发框架,它通过以下方式来抹平各端(如微信小程序、支付宝小程序、H5、React Native 等)的差异: 统一的编程模型:Taro 提供了与 React 类似的编程模型,开发者可以使用 JSX 语法和…

幻兽帕鲁服务器搭建,包教包会

服务器搭建 幻兽帕鲁服务器搭建,包教包会,不会评论区评论手把手帮忙搭建 一、steamCMD安装 1、安装screen: yum install screen -y 2、切换用户: su -ls /bin/bash steam 3、切换至steam用户目录: cd ~ 4、下载ste…

CrawlSpider【获取当前访问链接的父链接和锚文本】代码逻辑

tip: 超链接对应的文案通常被称为“锚文本”(anchor text) 在继承CrawlSpider父类的前提下,编写一个 fetch_referer 方法获取当前response.url的父链接和锚文本。 实现逻辑,通过一个例子简要说明: 如果设置 start_…

快快销ShopMatrix 分销商城多端uniapp可编译5端 - 订单金额满多少,一次性订单金额满多少,充值多少升级

“订单金额满多少”或“一次性订单金额满多少”进行升级的商业逻辑。这种策略通常是为了激励用户增加消费额度、提高客单价或者提升用户的活跃度与忠诚度,具有以下好处: 刺激消费增长:商家设置一定的门槛,如一次性订单金额满300元…

C++基础语法和用法

文章目录 1.hello world2.引入namespace(命名空间/域问题)3.输入输出4.缺省参数/默认参数5.函数重载6.引用7.内联函数8.auto关键字&#xff0c;基于范围的for循环&#xff0c;空指针NULL8.1 auto8.2 基于范围的for循环8.3 nullptr 1.hello world #include <iostream> us…

世界经济论坛发布《2024年全球风险报告》和《2024年全球网络安全展望》:网络攻击是2024世界5大风险之一,网络安全经济增速是全球经济的四倍

在近日举行的世界经济论坛 (WEF)上&#xff0c;发布了《2024 年全球风险》报告和《2024年全球网络安全展望》两份重磅报告&#xff0c;分别揭示了全球经济今年和未来几年可能面临的一些关键风险和问题&#xff0c;以及网络安全与全球经济之间的逻辑关系。 2024年全球风险报告 今…

SQL数据库的创建操作

1.如何才能创建一个库、表 CREATE DATABASE 数据库: SHOW databases&#xff1b; USE 数据库; DROP DATABASE 数据库&#xff1b; /*数据表操作/ CREATE TABLE teacher( id int (4) not null primary key auto_increment, name char(20)not null, sex char(10) notnul…

ES6笔记-symbol

ES6 symbol 是什么 ES5的对象属性名是字符串&#xff0c;这容易造成属性名的冲突。symbol是一种机制&#xff0c;保证每个属性的名字都是独一无二的。这样就从根本上防止属性名冲突。 它是一种原始数据类型Symbol,表示独一无二的值。它属于javaScript语言的原生数据类型之一。…

CloudPanel RCE漏洞复现(CVE-2023-35885)

0x01 产品简介 CloudPanel 是一个基于 Web 的控制面板或管理界面,旨在简化云托管环境的管理。它提供了一个集中式平台,用于管理云基础架构的各个方面,包括虚拟机 (VM)、存储、网络和应用程序。 0x02 漏洞概述 由于2.3.1 之前的 CloudPanel 具有不安全的文件管理器 cook…

MyBatis第四课动态SQL

目录 引言&#xff1a; 一、动态SQL书写方式 二、会帮我们处理多余的字符 方法2:使用where也可以进行消除and&#xff0c;但是出现的问题 三、标签 四、foreach(循环操作) ​编辑 Mybatis传递List集合报错 Available parameters are [collection, list] 和 引言&…

Apache Spark中的广播变量分发机制

Apache Spark中的广播变量提供了一种机制&#xff0c;允许用户在集群中共享只读变量&#xff0c;并且每个任务都可以访问这个变量&#xff0c;而不需要在每次任务之间重新发送该变量。这种机制特别适用于在所有节点上都需要访问同一份只读数据集的情况&#xff0c;因为它可以显…

Linux: make/Makefile 相关的知识

背景&#xff1a; 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的 规则来指定&#xff0c;哪些文件需要先编译&#xff0c…

关于小程序吞噬margin-rightBug

关于小程序吞噬margin-right的Bug 今天在写小程序的时候发现我在flex布局的时候我的margin-right不生效 经过测试只能使用display:inline-block; 配合 white-space: nowrap;来实现flex布局同时也解决了不显示右边距的问题 复盘:在小程序中有一个横向滚动的 需求 滚动的屏幕的…

良心推荐!五个超好用的Vue3工具

vue3-dnd 是用来做drag and drop的&#xff0c;也就是拖放&#xff0c;很多人多 Vue 的拖放库已经断代了&#xff0c;其实 Vue3 也有拖放库的&#xff0c;那就是 vue3-dnd。 v-wave 这可库可以通过自定义指令的形式&#xff0c;让目标点击节点具备波纹的效果&#xff0c;如下…

React 18版本配置rem 和 vw

React 18版本配置rem 和 vw 经过无数次的实验最终发现兼容性比较好的方案是配置webpack.config.js 第一步: npm install lib-flexible postcss-pxtorem yarn add lib-flexible postcss-pxtorem第二步: 接下来直接解包-- yarn eject npm run eject第三步: 这一步也是最关键…