kafka 消费者的消费策略以及再平衡1

2023-09-16 00:48:33

一kafka 再平衡

1.1 kafka的再平衡

Kafka的再平衡是consumer所消费的topic发生变化时,topic上的分区再次分配的情况。

默认策略是 Range + CooperativeSticky 。 Kafka 可以同时使用 多个分区分配策略。

1.2 kafka触发再平衡的情况

1.consumer group中的新增或删除某个consumer,导致其所消费的分区需要分配到组内其他的consumer上;

2.consumer订阅的topic发生变化,比如订阅的topic采用的是正则表达式的形式,如test-*此时如果有一个新建了一个topic test-user,那么这个topic的所有分区也是会自动分配给当前的consumer的,此时就会发生再平衡;

3.consumer所订阅的topic发生了新增分区的行为,那么新增的分区就会分配给当前的consumer,此时就会触发再平衡。

1.3 kafka触发再平衡的策略

1.Round Robin:会采用轮询的方式将当前所有的分区依次分配给所有的consumer;

2.Range:首先会计算每个consumer可以消费的分区个数,然后按照顺序将指定个数范围的分区分配给各个consumer;

3.Sticky:这种分区策略是最新版本中新增的一种策略,其主要实现了两个目的:

将现有的分区尽可能均衡的分配给各个consumer,存在此目的的原因在于Round RobinRange分配策略实际上都会导致某几个consumer承载过多的分区,从而导致消费压力不均衡;如果发生再平衡,那么重新分配之后在前一点的基础上会尽力保证当前未宕机的consumer所消费的分区不会被分配给其他的consumer上;

1.4 Round Robin策略

其主要采用的是一种轮询的方式分配所有的分区。轮询的策略就是简单的将所有的partition和consumer按照字典序进行排序之后,然后依次将partition分配给各个consumer,如果当前的consumer没有订阅当前的partition,那么就会轮询下一个consumer,直至最终将所有的分区都分配完毕。

假设假如现在有 7 个分区, 3 个消费者,排序后的分区将会 是0,1,2,3,4,5,6;消费者为c1,c2,c3

缺点:

轮询的方式会导致每个consumer所承载的分区数量不一致,从而导致各个consumer压力不均一。

1.5 Range策略

Range策略就是,统计出分区数/消费者数量,得出的结果就是每个分区的平均数,余数再平均分给前面几个消费者。

假设假如现在有 7 个分区, 3 个消费者,排序后的分区将会 是0,1,2,3,4,5,6;消费者为c1,c2,c3

缺点:这种方式从计算原理上就会导致排序在前面的consumer分配到更多的分区,从而导致各个consumer的压力不均衡。

1.6 Sticky策略

可以理解为分配的结果带有“粘性的”。即在执行一次新的分配之前,consumer尽量保持原有分配的分区不变化。在此基础上进行新增一些分区。

假设假如现在有 7 个分区, 3 个消费者,排序后的分区将会 是0,1,2,3,4,5,6;消费者为c1,c2,c3

结论:各个分区是均匀的分配到各个consumer的,并且还保证了当前consumer已经消费的分区是不会分配到其他的consumer上的。与Round Robin进行对比,可以很明显的发现,Sticky重分配策略分配得更加均匀一些。

https://mp.weixin.qq.com/s?__biz=MzI2NTkwOTgxMw==&mid=2247483653&idx=1&sn=e0df814f7818414f27ad2c2c567b031a&chksm=ea97625fdde0eb4922eae9ded101dbdf149a35a9241046aadaa90922cf8399c9e609cda4df9f&scene=27

更多推荐

element日历插件获取显示的第一天和最后一天

和重置日期内容显示需求是要传入当前显示的第一天和最后一天来获取范围,再判断某个日期是否有内容标记已知星期排版是固定的,第一天是星期天,最后一天是星期六。通过当月1号和最后一天再往前推算需要展示上个月几天,和下个月几天。//获取日历显示时间范围constgetRange=(date)=>{//日历第一天letfirstD

前端JavaScript设计模式探秘:理论与实践

前端JavaScript设计模式探秘:理论与实践在前端开发领域,JavaScript设计模式是一种重要的软件开发方法,可以帮助开发者解决常见的Web界面开发问题,提高代码的可维护性、可扩展性和可重用性。本文将详细探讨JavaScript设计模式的基本概念、常见类型以及应用场景,并通过实际案例展示模式的实现细节和代码示例

ES9,ES10

文章目录ES9新特性对象的剩余参数与扩展运算符正则表达式命名捕获组Promise.finally()异步遍历器ES10新特性Object.fromEntriestrimStart()andtrimEnd()Symbol对象的description属性可选的catchES9新特性对象的剩余参数与扩展运算符对象的剩余参数l

使用node实现websocket

使用node实现websocket什么是websocketwebsocket代表了Web应用程序通信方式的根本转变。不同于传统的HTTP请求响应周期,即客户端从服务器请求数据并等待响应,websocket在客户端和服务器之间建立一个持久的全双工连接。这意味着一旦建立了websocket,数据可以在任何时候双向流动,而不

各种存储性能瓶颈如何分析与优化?

【摘要】本文结合实践剖析存储系统的架构及运行原理,深入分析各种存储性能瓶颈场景,并提出相应的性能优化手段,希望对同行有一定的借鉴和参考价值。【作者】陈萍春,现就职于保险行业,拥有多年的系统、存储以及数据备份等运维工作经验。前言可靠性、安全性和性能是IT系统最重要的三个评价维度。对于IT系统来说,可靠性和安全性是基础,系

如何使用 NestJS 构建 GraphQL API

本GraphQL和NestJS教程最后更新于2023年8月,旨在探索使用GraphQLAPI的好处。NestJS是一个TypeScriptNode.js框架,可帮助您构建企业级,高效且可扩展的Node.js应用程序。它支持RESTful和GraphQLAPI设计方法。GraphQL是一种用于API的查询语言,也是使用现

华为认证 | 安全HCIP和数通HCIP,该怎么选?

华为认证是全球认可的IT行业技术认证,是IT人员提升职业技能和市场竞争力的重要途径。为了满足不同网络工程师的职业需求和市场需求,华为认证设置了多个不同的认证方向,华为安全HCIP和数通HCIP都是华为认证中的一种。那么,这两个认证应该如何选择呢?01学华为安全HCIP能获得什么HCIP-Security培训与认证具备大

网络基础-传输层协议-TCP/UDP

TCP/UDP谈一谈端口号为什么会有端口号端口号划分一个进程可以bind多个端口号吗一个端口号可以被多个进程bind吗UDP协议格式udp协议的特点无连接不可靠面向数据报UDP缓冲区TCP协议格式![在这里插入图片描述](https://img-blog.csdnimg.cn/35e43cc2575c4188999fe

hexo搭建一个自己的博客

hexo+腾讯云服务器搭建一个自己的博客我的博客:http://www.elcarimqaq.top/前期准备node.js:https://nodejs.org/en/git:https://git-scm.com/download/winhexo官方文档:https://hexo.io/zh-cn/docs/ind

元宇宙×工业管理软件:强强联合,生产力放心升级!

什么是元宇宙?元宇宙是虚拟现实技术和人工智能技术结合所形成的一个数字世界,是实现人类无限创造和互动的未来形态。它以三维图像为基础,通过虚拟现实设备和云计算技术,将数字化数据、物理世界和人类社交行为有机结合起来,形成一个全新的数字世界。什么是工业管理软件?工业管理软件是一类应用于企业生产制造和运营管理的软件系统。它通过集

es6新语法特性+vue2的学习笔记

1.es6ECMA的第6版,15年发布,规定新的语法特性2.let声明变量varlet声明的变量会越狱声明的变量有严格的作用域可以声明多次只能声明一次会变量提升==(未声明的变量不会报错)==不会变量提升代码案例:<script>//{//vara=1;//letb=2;//}//console.log(a);////

热文推荐