当前位置: 首页 > news >正文

Kafka 重平衡

Kafka 重平衡

  • 协调者
  • Rebalance
    • Rebalance 条件
    • Rebalance 避免

Rebalance :

  • 让单 Group 下所有的 Consumer 怎么消费订阅主题的所有分区
  • Rebalance 时 , 所有 Consumer 要共同参与 (无法消费),在协调者 (Coordinator) 协调下,完成订阅主题分区的分配

协调者

协调者 (Coordinator) :

  • 给 Group 执行 Rebalance 时,提供位移管理和组成员管理
  • Consumer 提交位移 , 就是向 Coordinator 所在的 Broker 提交位移
  • 当 Consumer 启动时,会向 Coordinator 所在的 Broker 发送各种请求,由 Coordinator 负责执行消费者组的注册、成员管理记录

所有 Broker 启动时,会创建 Coordinator

  • 所有 Broker 都有各自的 Coordinator 组件
  • __consumer_offsets 能找 Group 的 Coordinator 在那个 Broker

某个 Group 确定 Coordinator 所在的 Broker 的步骤 :

  1. 找位移主题的哪个分区保存该 Group 数据:partitionId = Math.abs(groupId.hashCode() % offsetsTopicPartitionCount)
  2. 找该分区 Leader 副本的 Broker,该 Broker 为 Coordinator

例子 : 计算该 Group 的 Coordinator

  • 当 Group 的 group.id 设置为 test-group,则 hashCode 值 = 627841412
  • __consumer_offsets 的分区数 (50 个分区)
  • 将哈希值对分区数进行取模 , 求绝对值计算 : abs(627841412 % 50) = 12
  • 得出位移主题的分区 12 负责保存该 Group 的数据
  • 只要找出位移主题分区 12 的 Leader 副本在哪个 Broker 。该 Broker就是 Coordinator

Java Consumer API,能自动发现并连接正确的 Coordinator,能解决定位问题 :

  • 当 Consumer Group 出现问题,排查 Broker 端日志时,只要根据该算法就能准确定位 Coordinator 对应的 Broker

Rebalance

Rebalance 弊端 :

  1. Rebalance 影响 Consumer 端 TPS。Rebalance 时 , Consumer 都搁置
  2. 当 Group 下成员很多 ,Rebalance 慢
  3. Rebalance 效率低

例子 : 一个 Group 下有 10 个成员,每个成员平均消费 5 个分区

  • 当一个成员退出,就要进行 Rebalance,把该成员之前负责的 5 个分区给其他成员
  • 好的做法 : 维持当前 9 个成员消费分区的方案不变,将 5 个分区随机分配给这 9 个成员,能最大限度减少 Rebalance 对剩余 Consumer 的影响
  • 默认情况,每次 Rebalance 时,不会考虑之前的分配方案

因此,Kafka-0.11.0.0 推出 StickyAssignor (有粘性的分区分配策略) :

  • 每次 Rebalance 时,会尽可能保留之前的分配方案,实现分区分配的最小变动
  • 该策略有 bug

Rebalance 条件

Rebalance 发生条件 :

  • 组成员数量发生变化
  • 订阅主题数量发生变化
  • 订阅主题的分区数发生变化

Coordinator 误认为某个 Consumer 已挂要退组

  • 当 Group 进行 Rebalance 后,每个 Consumer 都会定期向 Coordinator 发送心跳请求,表明它还活着
  • 当某个 Consumer 没有及时发送心跳请求,Coordinator 就认为该 Consumer 挂了,就从 Group 中移除,并进行 Rebalance

Consumer 存活性的时间间隔 : session.timeout.ms ( 默认值是 10 秒)

  • Coordinator 在 10 秒内没收到 Group 下某 Consumer 实例的心跳,就认为该 Consumer 挂了
  • session.timout.ms 决定 Consumer 存活性的时间间隔

控制发送心跳请求频率 : heartbeat.interval.ms

  • 该值越小,Consumer 发送心跳请求的频率越高
  • 频繁发送心跳请求会额外消耗带宽资源,好处 : 能更快得知是否 Rebalance
  • Coordinator 通知各个 Consumer 进行 Rebalance,是将 REBALANCE_NEEDED 封装到心跳请求中

控制 Consumer 实际消费能力 : max.poll.interval.ms

  • 限定 Consumer 两次调用 poll 方法的最大时间间隔 (默认值是 5 分钟)
  • Consumer 在 5 分钟之内无法消费完 poll 的消息, Consumer 会主动发起离开组请求,Coordinator 就会 Rebalance

Rebalance 避免

Rebalance 避免 :

  • Rebalance 因未能及时发送心跳,导致 Consumer 被踢出 Group 而引发
  • Rebalance 由 Consumer 消费时间过长导致
  • Consumer 端的 GC 频繁 , 排除 GC 停顿

发送心跳配置 :

  • 设置 session.timeout.ms = 6s : 让 Coordinator 能更快定位已挂掉的 Consumer
  • 设置 heartbeat.interval.ms = 2s
  • 保证能发送至少 3 轮的心跳请求,即 session.timeout.ms >= 3 * heartbeat.interval.ms

Consumer 消费时间过长 :

  • max.poll.interval.ms > 下游最大处理时间。如 : 下游最长时间是 7 分钟,就设置为 8 分钟左右

相关文章:

Kafka 重平衡

Kafka 重平衡协调者RebalanceRebalance 条件Rebalance 避免Rebalance : 让单 Group 下所有的 Consumer 怎么消费订阅主题的所有分区Rebalance 时 , 所有 Consumer 要共同参与 (无法消费),在协调者 (Coordinator) 协调下,完成订阅主题分区的分配 协调者…...

PTA:L1-022 奇偶分家、L1-023 输出GPLT、L1-024 后天(C++)

目录 L1-022 奇偶分家 问题描述: L1-023 输出GPLT 问题描述: 实现代码: L1-024 后天 问题描述: 实现代码: 简单题,没写题解,看代码就能看懂 L1-022 奇偶分家 问题描述: 给…...

IDEA插件开发入门.02

前言许久没更新IDEA插件开发系列了。最近刚好在汇总日常开发中常见的代码“异味”,共享文档复制黏贴略显麻烦,所以想着是否可以搞一个IDEA插件来帮忙收集常见代码,毕竟IDEA作为后端程序员必备的开发工具,显然会方便很多。于是&…...

如何用 23 种编程语言说“Hello World”

在编程的世界里," Hello World " 往往是开发者开始学习一种新语言时写的第一个程序。这个简单的程序会将 “Hello World“ 输出在我们的屏幕上。看似很简单的行为,实际上对于每一个新学习编程语言的人来说,它代表着新的起点。那么&…...

【Linux快速入门】文件目录操作

文章目录概念1. Linux文件系统概述2. Linux文件目录结构3. Linux文件和目录操作3.1 文件操作3.1.1 创建文件3.1.2 复制文件3.1.3 移动文件3.1.4 删除文件3.1.5 查看文件3.1.6 输出指令3.1.7 >和>>指令3.2 目录操作3.2.1 创建目录3.2.2 复制目录3.2.3 移动目录3.2.4 删…...

字体反爬慢慢总结破解方式

什么是字体反爬 网页开发者自己创造一种字体,因为在字体中每个汉字都有其代号,那么以后再网页中不会直接显示这个文字的效果。而是显示其代号,因此即使获取了网页的文本内容。也只是获取到文字的代号,而不是文字本身。 简单来说&…...

Kafka 位移提交

Kafka 位移提交自动提交手动提交Consumer 的消费位移 : 记录 Consumer 下一条消息的消费位移 如 : Consumer 已消费 5 条消息 (位移: 0 - 4) , 此时 Consumer 位移 5 : 指向下一条消息的位移 提交位移 (Committing Offsets) : Consumer 向 Kafka 汇报位移数据 Consumer 能同…...

kubernetes--监控容器运行时:Falco

目录 Falco介绍 Falco架构 Falco的安装 告警规则示列 威胁场景测试: 监控容器创建的不可信任进程(自定义规则) Falco支持五种输出告警方式falco.yaml: Falco告警集中化展示: Falco介绍 Falco是一个Linux安全工具…...

HTTP协议详解(上)

目录 前言: 认识URL HTTP协议方法 通过Fiddler抓包 GET和POST之间典型区别 header详解 HTTP响应状态码 常见状态码解释 状态码分类 HTTP协议报文格式 小结: 前言: HTTP协议属于应用层协议,称为超文本传输协议&#xff…...

java性能-原生内存-内存分析

原生内存最佳实践 内存占用 jVM使用的原生内存和堆内存总和就是一个应用程序的总内存——操作系统角度 jvm启动时候加载的类路径下的jar文件相关的内存和系统其他进程共享资源的可能 测量内存占用 线程是个例外——每当创建一个线程操作系统都会分配一些原生内存存储线程栈…...

c++类与对象

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章 🔥座右铭:“不要等到什么都没有了,才下定决心去做” &#x1…...

Java并发编程与API详解

文章目录前言操作系统——进程和线程进程进程组成进程状态进程控制进程创建进程终止进程阻塞和唤醒进程通信线程线程组成线程状态线程控制线程的实现方式用户线程内核线程混合方式CPU调度调度的层次调度的实现调度器调度的时机、切换与过程进程调度的方式闲逛进程两种线程的调度…...

【冲刺蓝桥杯的最后30天】day5

大家好😃,我是想要慢慢变得优秀的向阳🌞同学👨‍💻,断更了整整一年,又开始恢复CSDN更新,从今天开始更新备战蓝桥30天系列,一共30天,如果对你有帮助或者正在备…...

大厂与小厂招人的区别,看完多少有点不敢相信

前两天在头条发了一条招人的感慨,关于大厂招人和小公司招人的区别。 大厂:有影响力,有钱,能够吸引了大量的应聘者。因此,也就有了筛选的资格,比如必须985名校毕业,必须35岁以下,不能…...

前端ES5对象特性

ES5对象特性 对象和函数的原型 JS中每一个对象都有一个特殊的内置属性,这个特殊的对象可以指向其他的对象 我们通过引用对象的属性key来获取一个value时,它会触发 Get 的操作首先检查该对象是否有对应的属性,如果有的话就使用对象内的如果…...

Linux入门介绍及Linux文件与目录结构

前言 本文小新为大家带来 Linux 入门介绍及Linux 文件与目录结构 相关知识,具体内容包括Linux入门介绍(包括:Linux概述,Linux与Windows区别,CentOS 下载地址),Linux文件与目录结构等进行详尽介绍…...

超赞,用python实现流媒体服务器功能,寥寥几句搞定。

步骤: 要使用Python将实时摄像机传送流写入H5页面,可以使用以下步骤。 1、安装必要的软件包。您需要安装OpenCV和Flask以及gunicorn 与 gevent 。您可以通过在终端中运行以下命令来执行此操作。 pip install opencv-python pip install Flask pip ins…...

冥想第七百二十一天

1.3.3周五,又是周五了。今天又运动了5公里,很舒服轻松。 2.还是往常的生活,休息的也很好,开春后跑的一直很好。 3.早上30分钟健康操。中午转了圈, 给大哥说下周去上海。 4.感谢父母,感谢朋友,感…...

06-Oracle表空间与用户管理

本讲主要内容: 1.表空间管理:表空间的作用,创建,修改,删除及管理; 2.用户管理:创建用户,修改用户,删除用户,修改密码,解锁; 3.用户…...

Mysql 索引特点

承接上文Mysql Server原理简介聚簇索引、二级索引、联合索引分别具备什么样的特点?聚簇索引数据跟索引放在一起的叫聚簇索引;数据和索引分开存储的叫非聚簇索引;innodb存储引擎,数据和文件都放在ibd文件中,实际的数据是…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...