导语

在当今大数据和实时通信的时代,消息队列在分布式系统中扮演着至关重要的角色。CKafka 作为一种高性能、高可靠的消息中间件,被广泛应用于各种业务场景中。然而,随着业务的增长和数据流量的增加,CKafka 在生产者和消费者以极高的速度生产/消费大量数据或产生请求时,可能会导致 Broker上资源的过度消耗,造成网络 IO 饱和等问题。为了避免这种情况对全量业务产生影响,CKafka 设计了一套完善的限流方案。本文将详细探讨 CKafka 限流的相关内容,包括限流机制、最佳实践方法以及常见问题的分析,帮助用户更好地使用 CKafka,保障系统的稳定性和性能。

CKafka 限流方案概述

以售卖规格为 20MB 的实例为例:

CKafka 针对客户使用场景和需求,通常至少为 3 节点部署,因此 20MB 的流量设计为每个节点承受 6.67MB 的读和写流量。为了发挥最大效能,在使用上建议设置的分区数尽量为节点的 2 - 3 倍,这样可以使请求流量均衡地分布到各个节点上。

目前 CKafka 提供两种层级的限流能力,限流能力分别如下:

集群级限流

写限流:整体限制为 20MB/s,但考虑到副本因素,3 节点且单节点分配 6.67MB/s 的情况下,在单分区情况下写入最大 6.67MB/s,单节点双分区且计算副本流量时,最大写入为 3.33MB/s。

读限流:整体限制为 20MB/s,意味着客户最多压测到的消费流量(不计算副本)为 20MB/s 附近。

Topic 级限流

客户可以根据自身需求配置 Topic 的限流。例如,对于 Topic:Test,2副本,可以配置写入限流 7MB/s(已计算副本),消费限流 20MB/s。

CKafka 如何进行限流?

为保证服务的稳定性,CKafka 在消息出入上都做了流量管控。

用户所有副本流量之和超过购买时的峰值流量时,会发生限流。

在生产端发生限流时,CKafka 会延长一个 TCP 链接的回应时间,延迟时间取决于用户瞬时流量超过限制的大小。和道路交通管制的原理有点类似,流量超得越多,延时算法得出来的延时值越高,最高 5 分钟。

在消费端发生限流时,CKafka 会缩小每次 fetch.request.max.bytes 的大小,控制消费端的流量。

CKafka 限流机制及原理

软限流机制

CKafka 的限流机制是软限流,即当用户流量超过配额后,采用延时回包的方式进行处理,而不是给客户端返回报错。

以 API 限流为例,举例如下:

硬限流:假设调用频率为 100次/s,当每秒内客户端调用超过 100 次时,服务端就会返回错误,客户端就需要根据业务逻辑进行处理。

软限流:假设调用频率为 100次/s,正常耗时是 10ms。当每秒内客户端调用超过 100 次时:

  • 如为 110 次,则本次请求耗时 20ms。

  • 如为 200 次,则耗时为 50ms。此时对客户端就是友好的,不会因为突增流量或者流量波动产生报错告警,业务可以正常进行。

综上所述,在 Kafka 这种大流量的场景下,软限流是更符合用户体验的。

购买带宽和生产消费带宽的关系:

  • 生产最大带宽(每秒)= 购买带宽 / 副本数

  • 消费最大带宽(每秒)= 购买带宽

延时回包限流原理

CKafka 实例的底层限流机制是基于令牌桶原理实现的。将每秒分为多个桶,每个时间桶的单位为 ms。

限流策略会把每秒(1000ms)均分为若干个时间桶。例如分为10个时间桶,每个桶的时间则为100ms。每个时间桶的限流阈值就是总实例规格速度的1/10。如果某个时间桶内的 TCP 请求流量超过了该时间桶的限流阈值,会根据内部限流算法增加该请求的延时回包时间,使客户端无法快速收到 TCP 回包达到一段时间内的限流效果。

CKafka 限流最佳实践

分区数的规划与局部限流

由于 CKafka 实例采用多节点分布式部署,每个节点有固定的读写限流额度。为了提高流量使用率,客户应保证分区数尽量维持节点数的倍数,使流量尽可能均衡。特殊场景(如指定消息的key会使写入流量不均衡,但默认情况下 CKafka 的客户端会尽可能按分区均衡流量发送到服务端),合理规划分区数可以有效避免局部热点问题带来的局部限流问题。

实例限流次数与延时回包监控说明

限流次数统计

CKafka 的实例限流次数是各个节点限流次数之和,不代表整个实例的写入和消费性能,也不代表所有节点都触发了限流。当出现限流次数但限流流量整体低于规格值时,建议在高级监控中查看各个节点的限流次数统计,以确定是哪个节点出现了限流。

延时回包监控

遇到限流问题,需密切关注延迟回包时间。目前 CKafka 采用延迟回包策略,用户可在专业版的高级监控中查看该指标,以便及时了解系统运行状态。

写入和消费限流模型的区别

由于生产涉及副本同步,所以要除以副本数;消费只从 Leader 上拉取数据,不需要除以副本数。具体计算为:单节点的最大写入流量=规格值/节点数/副本数,单节点的消费流量=规格值/节点数。

关于偶发限流次数的应对

因为副本会占用写入限流,更多副本意味着写入流量会更低。限流实际是节点级别执行,监控是秒级,而客户看到的监控是分钟粒度,所以当整体写入流量大于70%(除以副本)时,个别节点在秒级可能会出现局部限流,但通常不会持续很久。客户可在高级监控节点限流查看具体超流量情况,若对响应时间要求较高,建议规格预留 30% 的 Buffer。

关于持续限流次数的处理

当实例出现限流次数,同时在高级监控中发现每个节点都持续出现限流,且实例的流量低于规格值 10% 以上,并排除了 Topic 限流规则的影响,这种情况不符合预期。针对此类问题,您可以提交工单寻求支持。

常见问题分析

监控生产/消费低于实例规格时触发限流的原因

CKafka 限流以 ms 为单位,控制台监控平台数据按每秒采集,分钟维度聚合。依据令牌桶原理,单个桶不强制限制流量。例如,当实例带宽规格为 100MB/s,每个 100ms 时间桶限流阈值为 10MB/桶,若某秒第一个 100ms 时间桶达到 30MB(时间桶限流阈值的3倍),会触发限流策略,增加延时回包时间。即使后续桶中流量减少,最终秒内流量速度仍可能因限流策略而低于实例规格。

生产/消费峰值流量高于实例规格的原因

同样假设实例带宽规格为 100MB/s,每个 100ms 时间桶限流阈值为 10MB。若某秒第一个 100ms 时间桶达到 70MB(时间桶限流阈值的 7 倍),会触发限流策略,增加延时回包时间,当后续时间桶有流量涌入时,秒内流量速度可能高于实例规格。

限流次数暴增的原因

限流次数以 TCP 请求统计,若某秒第一个时间桶流量超标,该时间桶剩余时间内所有 TCP 请求都会被限制并统计限流次数。

CKafka 限流的判断方法

健康度展示

在实例列表上,每个集群都有对应的健康度展示。当健康度显示为“警告”字样时,可以将鼠标移至其上查看弹出的详细数据。这个数据会展示当前用户的峰值流量以及发生限流的次数,用户可以根据这里的数据判断该实例是否发生过限流。

监控数据查看

用户可以打开监控数据查看流量的最大值,如果 (流量的最大值 × 副本数) > 购买时的峰值带宽,则表明至少发生过一次限流。可通过配置限流告警得知是否发生限流。

控制台监控页面

在 CKafka 控制台的监控页面查看实例监控,当限流次数大于 0,证明发生过限流。

总结

CKafka 的限流机制对于保障系统的稳定性和性能至关重要。通过合理规划分区数、关注限流次数和延时回包监控、区别对待写入和消费限流模型、预留适当的 Buffer 以及及时处理持续限流等问题,同时掌握常见问题的分析方法和限流的判断技巧,用户可以更好地使用 CKafka,避免因资源过度消耗而影响业务运行。在实际应用中,应根据具体业务场景和需求,灵活运用 CKafka 的限流功能,以达到最佳的使用效果。

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

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

相关文章

消息队列的基本概念

文章目录 为什么需要消息队列?🤔🎯 核心价值📋 使用场景 🏗️ 架构层面的基本概念整体架构图📦 核心组件详解1. Broker(消息代理)2. Topic(主题)3. Partition…

Shell脚本中和||语法解析

https://www.cnblogs.com/liuyuelinfighting/p/16377705.html 在 Shell 脚本中,&& 和 || 是逻辑操作符,用于根据前一个命令的退出状态(成功或失败)决定是否执行后续命令。这种语法称为 命令链(Command Chainin…

MySQL中的常见运算符

精选专栏链接 🔗 MySQL技术笔记专栏Redis技术笔记专栏大模型搭建专栏Python学习笔记专栏深度学习算法专栏 欢迎订阅,点赞+关注,每日精进1%,共攀技术高峰 更多内容持续更新中!希望能给大家带来帮助~ &…

高级IO技术详解:阻塞/非阻塞IO、多路复用与内存映射

高级IO技术详解:阻塞/非阻塞IO、多路复用与内存映射 关键词:阻塞IO 非阻塞IO select/poll/epoll mmap 一、阻塞IO vs 非阻塞IO 类型行为特点设置方式阻塞IO- 读空管道阻塞- 写满管道阻塞默认模式非阻塞IO- 读空文件返回 -1,errnoEAGAIN- 写满…

【无标题】拓扑对偶框架的严格性补完与哲学突破

拓扑对偶框架的严格性补完与哲学突破: 一、数学严格性补完:同调类守恒的解决方案 1.1 负系数问题的几何化修正 **问题本质**:当 $a_i$ 含负数时,曲率分配 $\kappa\frac{2\pi a_i}{A_{\text{max}}}$ 导致伪黎曼流形 **解决方案…

从0开始学习R语言--Day25--A/B测试 vs 多臂老虎机

通常在比较两个不同的方案对数据的影响时,我们会各拿50%的数据去进行对照试验,这样观测到的结果会最大程度地保留统计学上的特点。但实际上,并不是所有对比不同方案都要这样做,一来,我们需要等到两组实验都完全结束后&…

功耗高?加密弱?爱普特APT32F1023H8S6单片机 2μA待机+AES硬件加密破局

爱普特APT32F1023H8S6单片机深度解析 1. 产品定位 APT32F1023H8S6 是爱普特半导体(APT)推出的 32位高性能单片机,基于 ARM Cortex-M0内核,主打 高集成度、低功耗、高性价比,面向消费电子、工业控制和物联网领域。 2. …

【MFC】绘制自定义控件-显示图片(支持放大操作)

目录 一、CDC类(二级缓存)二、计算视口三、放大操作代码中初始化操作(方便以后cv) 一、CDC类(二级缓存) CDC类是设备上下文的核心类,它的作用是抽象化对图形输出设备(像屏幕、打印机…

在Proteus新工程中放置基本元器件

视频教程: [最详细]Proteus新建第一个工程与快捷键设置 操作步骤 1选择这个黄色的三角,然后点击旁边的P,开始找元件。 2点开P后,呈现如下图界面,我们在Keyword栏中,输入stm32,然后他会自动出现对应的元件&…

PRUD币推动健康数据资产化,开启Web3隐私金融新时代

在全球健康科技与数据主权浪潮下,PRUD币(Prudential Utility & Data Token)正成为Web3健康金融领域中的重要通证。项目通过链上身份绑定、健康行为证明、隐私计算与NFT机制,为用户打造了“健康数据资产化”的创新路径&#xf…

Mac 安装 finalshell

1.下载 地址:FinalShell官网 第一个进入选择对应的 mac 版本下载。 下一步下一步完成安装。 2.链接虚拟机,点击图示文件夹 点击新建链接,新建 SSH 链接 3.去 vmware 中查询 Linux 系统的 IP,使用 ip addr 命令或者 ifconfig 命令皆可。 ip…

Javaweb - 2 HTML

目录 HTML 入门 1. HTML & CSS & JavaScript 的作用 2. 什么是 HTML 3. 什么是超文本 4. 什么是标记语言 5. HTML 基本结构 6. HTML 概念词汇解释 7. HTML 的一些语法规则 8. 开发工具 VsCode 安装插件: 常见设置: HTML 常见标签 …

CWGAN-GP 增强型 CAE 在非 IID 数据集中用于 5G-NR 干扰检测

抽象 在不断扩大的 5G-NR 无线蜂窝网络领域中,无线干扰攻击作为安全攻击普遍存在,损害了接收信号的质量。我们通过将加性高斯白噪声 (AWGN) 合并到真实世界的同相和正交 (I/Q) OFDM 数据集中来模拟干扰环境…

JavaEE-Spring-Web-Mvc

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC". Servlet 是⼀种实现动态⻚⾯的技术. 准确来讲Serv…

Linux从入门到入门

系统教程学习类 Ubuntu 从入门到精通 系统页面/基本操作类 Ubuntu20.04终端固定终端到左边的导航栏_ubuntu20.04设置菜单固定-CSDN博客Ubuntu 20.04 系统5分钟后老是自动锁屏_修改锁屏时间-CSDN博客 命令类 拷贝:将 下载 文件夹里的.sh文件 复制到opt目录下 sudo cp…

AI自动生成Git提交信息-git AI Commit

在现代软件开发中,编写清晰且一致的Git提交信息对于维护项目历史和促进团队协作至关重要。然而,为每次变更手动撰写描述性提交信息可能耗时,尤其是处理复杂差异或大型项目时。AI Commit 是一个利用AI分析Git差异并生成符合Conventional Commi…

【三大前端语言之一】样式:CSS详解

【三大前端语言之一】样式:CSS详解 在了解完HTML的有关知识后,我们应该知道,一个网页光有框架还不行,必须还得有装饰它的样式。就好比房子的结构搭好了,但如果没有油漆、没有窗帘、没有家具,就无法真正展现…

Spring AI 聊天记忆功能实战(一):从接口设计到生产实践

Spring AI 聊天记忆功能实战(一):从接口设计到生产实践 在构建AI对话应用时,聊天记忆管理及存储是实现连贯上下文交互的关键组件。而大模型(LLM)本质上是无状态的,这意味着它们不会保留历史交互…

Element Plus 对话框 el-dialog 和 抽屉 el-drawer 的使用注意项(使用 div 包裹)

总结:使用 div 包裹!!! 详细说明: 对话框 el-dialog 或 抽屉 el-drawer 样式的设置说明: 要想有效设置 el-dialog 或 el-drawer 的样式,需确保 el-dialog 或 el-drawer 的上层不是template&am…

【python】简单演示 gateway、service、client的工作原理

gateway 看起来主要是做协议转换的A gateway is a network node that acts as an entrance and exit point, connecting two networks that use different protocols. It allows data to flow between these networks, essentially acting as a translator between different c…