Kafka重平衡rebalance是什么

news2024/11/27 8:31:47

重平衡

背景:

假如你是一家公司的老板,手下有三名员工张三、李四、王五,现在你有三项工作A、B、C,正好安排给三人。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U6WbUkOc-1685858146326)(C:\Users\jimmy\Downloads\RPA实施流程 (1)].png)

过了一个月后,员工王五离开了公司。这个时候只剩下两名员工,你只能把原先王五安排的工作交给李四。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l94CkETx-1685858146327)(C:\Users\jimmy\Downloads\RPA实施流程 (2)].png)

又过了一个月,公司进来了员工小明、小红,但是因为每项工作都是独立的,所以没有新的任务分配给小红

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cepXFCwu-1685858146327)(C:\Users\jimmy\Downloads\RPA实施流程 (4)].png)

后来你发现这样的任务分配不合理,你将各项工作进一步细化,保证每个员工都能分配到工作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bzFkf0N9-1685858146327)(C:\Users\jimmy\Downloads\RPA实施流程 (6)].png)

原先的三项工作被细化成了九项工作,这样每个人就都有活干了,但是可能有的人要承担额外的工作(平均分配不了)

设计

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9a5eA7z9-1685858146328)(C:\Users\jimmy\Downloads\RPA实施流程 (7)].png)

对于Kafka来说,背景中的公司可以理解为一个主题,公司里的每个工作就是主题的每个分区。事实上一个消费者组可以订阅不同的主题,但是一个分区只能被一个消费者消费,也就是说一项“工作”只能被分配给一名“员工”,这样的设计是考虑是:

  • 将分区均衡分配给每个消费者
  • 保证顺序消费(一个分区内的消息是有序的,且只能被一名消费者消费)

分区分配算法

Kafka提供了三种分配策略,分别是RANGE,Round Robin以及Sticky

在触发重平衡的过程中,消费者是无法进行消费的,所以在生产环境中,我们往往需要避免这种情况的发生

相关参数

与重平衡相关参数:

  • session.timeout.ms 心跳超时时间,默认10s
  • heartbeat.interval.ms 发送心跳频率,默认3s
  • max.poll.interval.ms 两次拉取消息之间间隔,默认值5分钟
  • max.poll.records 一次性最大拉取多少条消息,默认值500条

对于session.timeout.msheartbeat.interval.ms,开源官方有这样一条注释:

The expected time between heartbeats to the consumer coordinator when using  consumer's session stays active and to facilitate rebalancing when new consumers join or leave the group. The value must be set lower than session.timeout.ms, but typically should be set no higher than 1/3 of that value. It can be adjusted even lower to control the expected time for normal rebalances.

建议值是将session.timeout.ms设置为不高于heartbeat.interval.ms三分之一值。这样做的原因是如果你将心跳时间设置得过长,那么broker就无法检测到消费者的异常。如果时间设置得过短,那么可能短暂的网络抖动就可能会触发rebalance,同时也会频繁的心跳也会造成网络资源的浪费。

重平衡场景排查指南

Kafka的心跳线程是consumer与broker之间的心跳检查,如果消费者发现和broker之间的心跳超过了session.timeout.ms,那么消费者会阻塞并且进行重试。如果两次拉取消息的时间超过了max.poll.interval.ms , 那么即使消费者与客户端的心跳线程仍在保持,但是broker会认为客户端处于livelock状态,也会触发rebalance

出现Rebalance原因有可能以下几种:

  • 一次性拉取消息过多,处理能力不够
    • 解决方法:减少max.poll.records参数
  • 代码自旋/死锁
    • 在消费者拉取消息后,在代码逻辑处理上可能有自旋或等待锁操作,导致消息处理过长时间
  • 进程GC时间过长,导致心跳线程无法发送(或频繁full gc)
  • 等待数据库锁
    • 拉取消息后,可能存在写库/查询操作,可能使数据库死锁或插入/查询时间长导致消息处慢
  • 线程池满,参数配置有问题(核心线程数、最大线程数)
  • 存在耗时I/O操作(网络IO、磁盘IO)

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

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

相关文章

每日学术速递6.3

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Reconstructing the Minds Eye: fMRI-to-Image with Contrastive Learning and Diffusion Priors 标题:重建心灵之眼:fMRI-to-Image with Contrastive lear…

反向ajax实现

在过去的几年中,web开发已经发生了很大的变化。现如今,我们期望的是能够通过web快速、动态地访问应用。在这一新的文章系列中,我们学习如何使用反 向Ajax(Reverse Ajax)技术来开发事件驱动的web应用,以此来…

【Android开发基础】更新\修改Adapter适配器数据(例:聊天功能等)

文章目录 一、引言二、解决方案1、需求一2、需求二(1)普通方法(2)观察者模式(推荐) 一、引言 描述:如何在主线程(Activity/Fragment)UI中修改子线程(Adapter…

小白可以看懂的「GraphQL」,GraphQL到底是啥样

GraphQL是一种用于API的查询语言,可以在服务端定义GraphQL Schema,客户端可以向服务端发送GraphQL请求,服务端执行GraphQL查询,并将结果作为JSON返回给客户端。 下面是一个使用golang实现GraphQL的示例,首先需要安装g…

Ajax请求与浏览器缓存

在现代Web应用程序中,前端代码充斥着大量的Ajax请求,如果对于Ajax请求可以使用浏览器缓存,那么可以显著地减少网络请求,提高程序响应速度。 1. Ajax Request 使用jQuery框架可以很方便的进行Ajax请求,示例代码如下&a…

RISC-V 学习篇之特权架构下的中断异常处理

RISC-V 学习篇之特权架构下的中断异常处理 控制流和Trap特权架构简单的嵌入式系统的机器模式机器模式下的异常处理mtvec(Machine Trap-Vector Base-Address)mepc(Machine Exception Program Counter)mcause(Machine Cause&#xf…

Erlang/OTP 26 正式发布

导读Erlang 是一种通用的并发函数式程序设计语言。Erlang 也可以指 Erlang/OTP 的通称,开源电信平台 (OTP) 是 Erlang 的常用执行环境及一系列标准组件。 Erlang/OTP 26.0 已正式发布。这是一个重要版本更新,包含许多新特性、改进和不兼容的变化。 主要…

C++11右值

C11右值 类型与值类别左值纯右值将亡值内置类型类类型 左值引用和右值引用内置类型右值引用:具有右值引用自身为左值。右值引用与函数重载函数返回值 自定义类型右值引用构造函数的隐式转换右值引用与函数重载类类型作为函数的返回值 右值引用与函数模板泛化版本&am…

Java005——idea编写和运行第一个Java程序HelloWorld

1、首相需要了解什么是IDE(集成开发环境)? 2、了解Java有哪些主流的开发工具? 一、创建一个文件夹用来存放Java项目 二、创建一个空项目 点击idea首页新建项目按钮 创建一个空项目 这样空项目就创建好了 三、在空项目中新建一…

leetcode 数据库题 584,585,586,595,596,601,602,607,608,610

leetcode 数据库题 第三弹 584. 寻找用户推荐人585. 2016年的投资586. 订单最多的客户595. 大的国家596. 超过5名学生的课601. 体育馆的人流量602. 好友申请 II :谁有最多的好友607. 销售员608. 树节点610. 判断三角形小结 584. 寻找用户推荐人 https://leetcode.cn…

<数据结构>NO7.二叉树(附Oj练习题)

👇二叉树的完整代码在👇 syseptember的gitee仓库:二叉树https://gitee.com/syseptember/data-structure/tree/1513789167062c75dc172366199ce7a6b0577cc7/BinaryTree2/BinaryTree2 目录 树的概念及结构 0x01.树的概念 0x02.树的相关概念 …

快速定位接口问题,JMeter方法论,跨线程组接口关联测试!

目录 【前言】 【步骤】 1. 准备工作 2. 创建线程组 3. 创建HTTP请求 4. 添加正则表达式提取器 5. 添加HTTP请求关联控制器 6. 设置断言和验证器 7. 运行测试 【代码】 【结论】 【前言】 在进行接口测试时,接口之间的关联经常是我们需要重点测试的点之…

如何手写网络协议栈

哈喽,我是子牙,一个很卷的硬核男人。喜欢研究底层,聚焦做那些大家想学没地方学的课程:手写操作系统、手写虚拟机、手写编程语言…目前做了两门课:手写OS、手写JVM 今天想跟大家聊一个黑科技:手写网络协议栈…

Python的编码规范

目录 1、每个 import 语句只导入一个模块,尽量避免一次导入多个模块, 2、不要在行尾添加分号,也不要用分号将两条命令放在同一行, 3、建议每行不超过 80 个字符, 4、使用必要的空行可以增加代码的可读性 5、通常情…

让百万大学生崩溃的在线OJ,如何破局?

目录 一、在线OJ的的原理 二、在线OJ的使用规则 三、注意事项 1.关于作弊 2.如何防止作弊 3.输入输出格式 4.换行问题 四、经典在线OJ坑人题目以及博主被坑经历 五、提交不成功及解决方法 六、如何得心应手的拿下OJ系统 七、在线OJ的骗分技巧 在线OJ(Onl…

OpenGL简介

1.简介 一般它被认为是一个API,包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。OpenGL规范严格规定了每个函数该如何执行,以及它们的输出值。…

为何要用分布式锁Redis实现分布式锁

为何要用分布式锁 一、为什么要使用分布式锁 为了保证一个方法在高并发情况下的同一时间只能被同一个线程执行,在传统单体应用单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLcok或synchronized)进行互斥控制。但是,随着业务…

《论文阅读》连续前缀提示Prompt:table-to-text和摘要生成 ACL2021

《论文阅读》连续前缀提示Prompt:table-to-text和摘要生成 ACL2021 前言相关知识Table-to-Text Generation自编码语言模型自回归语言模型简介任务定义部分参数更新代码实验结果前言 你是否也对于理解论文存在困惑? 你是否也像我之前搜索论文解读,得到只是中文翻译的解读后…

高级算法工程师的工作职责(合集)

高级算法工程师的工作职责1 职责: 1、调研跟踪智能穿戴产品相关算法,为公司产品决策提供参考; 2、设计开发智能穿戴产品的计步、睡眠、心率、血氧饱和度、血压、心率变异性等相关参数的提取算法; 3、撰写算法开发文档,包括算法流程、测试方案…

小黑西安归来,政审完毕,眼睛手术做完一直在家躺着第5天的leetcode之旅:852. 山脉数组的峰顶索引

小黑代码 class Solution:def peakIndexInMountainArray(self, arr: List[int]) -> int:# 数组长度n len(arr)# 寻求山峰for i in range(n-1):if arr[i1] < arr[i]:return ireturn -1小黑二分模版 class Solution:def peakIndexInMountainArray(self, arr: List[int])…