前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >限流系列之三:TDMQ for Apache Pulsar 限流技术深度解析

限流系列之三:TDMQ for Apache Pulsar 限流技术深度解析

作者头像
腾讯云中间件团队
发布于 2025-04-10 01:25:15
发布于 2025-04-10 01:25:15
1140
举报

导语

在高速、高吞吐量的消息处理场景中,TDMQ Pulsar 版以其卓越的性能和可扩展性成为众多企业的首选。然而,随着生产者和消费者以极高的速度生产/消费大量消息,服务器资源如 CPU、内存、网络及磁盘 IO 等可能会面临饱和风险。为此,TDMQ Pulsar 版设计了完善的限流机制,以保护集群资源,确保系统的全局稳定性。本文将深入探讨 TDMQ Pulsar 版的集群级与主题分区限流技术,并提供实践指南。

为什么要做限流?

在 TDMQ Pulsar 版集群的运行过程中,生产者和消费者的高速运作犹如一把双刃剑,在带来高效数据传输的同时,也对服务端资源造成了巨大的压力。当它们以极高的速度生产和消费大量消息时,服务端的 CPU 需要不断地处理这些消息的生产和消费请求,磁盘需要存储大量的消息数据以及相关的元数据信息,网络磁盘 IO 则需要频繁地进行数据的读写操作,以保证消息的持久化存储和快速传输。如果不对这些操作进行限制,很容易导致 CPU 使用率飙升,内存耗尽,网络磁盘 IO 饱和,进而影响整个集群的性能和稳定性。

这种资源饱和的情况可能会引发一系列严重的问题。例如,CPU 过度繁忙会导致消息处理延迟增加,使得生产者发送消息的耗时大幅增长,甚至出现发送超时的情况;内存不足可能会导致消息丢失或者数据处理错误;网络磁盘 IO 瓶颈则会导致消息堆积,严重时可能会使整个集群陷入瘫痪状态。为了避免这些问题的发生,确保集群在高负载情况下仍能稳定运行,TDMQ Pulsar 版设计了一套完整的限流方案。

TDMQ Pulsar 版限流机制浅谈

TDMQ Pulsar 版支持两种维度的限流:集群级分布式限流和主题分区限流。这两种限流机制就像是为 TDMQ Pulsar 版集群安装了两道坚固的 “安全阀”,确保集群在高负载情况下仍能稳定运行。

  • 集群级分布式限流:适用于 TDMQ Pulsar 版专业集群。通过按照实例规格设置不同的限流阈值,对整个集群进行自我保护,避免因为资源消耗过高影响集群质量,造成全局稳定性风险。
  • 主题分区限流:适用于所有类型的 TDMQ Pulsar 版集群。对每个主题分区的生产和消费速率进行限制。

集群级分布式限流:秒级窗口的自我保护机制

限流机制

TDMQ Pulsar 版的生产限流机制采用了一种独特的延迟回包方式,这种方式就像是在消息传输的道路上设置了一个 “红绿灯”,通过控制消息的处理节奏来实现限流。其限流的统计窗口被设定为 1 秒,这是一个关键的时间单位,所有的限流统计和控制都在这个时间窗口内进行。

以生产 TPS 限流为例,假设我们将生产 TPS 设置为 100,这就意味着在 1 秒的时间内,系统最多处理 100 个消息。当用户在 1 秒中的前 400ms 发送了 100 个消息时,此时已经达到了设定的 TPS 阈值。那么第 101 个消息发送的请求就会遇到 “红灯”,它需要等待 600ms 后才能被处理。

  • 从生产者的角度来看,当出现生产限流时,由于消息需要等待处理,发送消息的耗时必然会增加。如果等待时间过长,就可能出现发送超时的情况。
  • 从消费者的角度来看,当发生消费限流时,消息从生产到消费的整体链路时延会增加。这就可能导致消息在队列中堆积,影响整个数据处理流程的效率。

限流原理

生产端

生产端的限流原理是基于 1 秒的统计窗口来实现的。当统计窗口内的配额被用尽时,服务端会将生产者的 Channel 全部关闭。直到下一个时间窗口到来,服务端才会重新打开生产者的 Channel,重新允许处理消息发送请求。

消费端

消费端的限流原理同样基于 1 秒的统计窗口。当统计窗口内的配额被用尽时,服务端会停止推送消息到消费者。消费者在这段时间内无法接收到新的消息,直到下一个时间窗口,服务端恢复推送消息,消费者才能继续进行消费操作。

需要注意的是,生产端限流后关闭 Channel,具体来说就是当生产出现限流后,服务端会将生产者对应的 TCP 连接通道关闭。关闭后,服务端就不再接受对应 TCP 连接的请求,直到 TCP 连接通道被再次打开。

实践教程

合理选购集群规格:用户应深入了解业务实际的峰值生产 / 消费量,这需要对业务的历史数据进行详细分析,预测未来的业务增长趋势。根据生产消费的扇出比例,科学合理地设置限流的生产 / 消费分配比例。在正式上线前,务必做好压测工作,通过模拟真实的业务场景和负载情况,提前评估集群容量是否能够满足业务需求。

避免延迟消息字段设置错误:如果业务发送的是非延迟消息,一定要注意不要设置延迟消息字段。因为一旦发送端设置了延迟消息字段,无论设置的延迟时间是多久,服务端都会按照延迟消息统计速率。以 Java 为例(GO 等其他 SDK 也类似),只要在发送消息的时候,设置了 DeliverAfter 或者 DeliverAt,就会被认为是延迟消息,即使里面的值为 0 或者小于当前时间。

配置集群的生产/消费的速率和带宽的告警:当集群的生产 / 消费的速率和带宽超过设置规格的 80% 时,建议及时升配专业版实例规格,以避免限流带来的耗时增加的风险。

配置生产 / 消费的限流次数的告警:当出现限流的时候,表示在秒级的窗口内存在生产 / 消费超限的情况,这时候也建议及时升配专业版实例的规格,避免限流带来耗时增加的风险。

常见现象说明

问题1:为什么生产/消费低于规格时会触发限流?

如上面限流原理所述,限流是以 秒(s) 为单位的,控制台监控平台数据是按分钟(min)维度采集上报。监控平台上的生产/消费的统计值的计算公式是 [1min内消息量/60]。当客户端生产消费的量在 1min 内分布不均衡的时候,可能集中在 1min 内的 1 秒或者几秒的时间窗口内生产/消费量很高,超过限流窗口中的配额,其他时间远低于限流窗口配额,这种情况下,监控到的生产/消费低于实例规格,但是触发了限流。

问题2:为什么生产/消费峰值会高于实例规格?

  • 情况1:TDMQ Pulsar 版是分布式系统,一个 TDMQ Pulsar 版节点由多个 Broker 节点组成,同一个时间点(一个限流窗口内),限流是由各个节点进行的,每个节点的限流阈值是当前集群剩余阈值。例如集群限流阈值 1000,Broker 节点数量为5,当实际使用量为 750 的时候(假设此时每个节点的使用量均匀,都是 150),每个节点此时的限流阈值是 400(150 + 1000-750)。此时,实际上瞬时能达到的流量可能到 2000(400*5),这样,一个限流窗口内可能出现超过规格的情况。
  • 情况2:如上面限流原理所述,当出现限流后,会将写的通道关闭,但是当前的请求(即使已经超过了限流阈值)还是会继续处理,所以,当并发请求较高的情况下,可能出现一个统计窗口内超过限流阈值的情况。

问题3:如何判断 TDMQ Pulsar 版是否发生限流?

在 TDMQ Pulsar 版专业集群控制台的集群监控页面查看集群监控信息,当限流次数大于 0,证明发生过限流。

主题分区限流:细粒度的流量管控

限流原理

主题分区限流在 TDMQ Pulsar 版的消息处理体系中扮演着重要的角色,它如同一个精密的流量调节阀,对每个主题分区的生产和消费速率进行精细管控,确保整个系统在高负载情况下仍能稳定、高效地运行。与集群级分布式限流不同,主题分区限流适用于所有类型的 TDMQ Pulsar 版集群,为各种规模和应用场景的集群提供了统一的流量控制保障。

生产端

生产端的限流逻辑依赖于内部的定时任务,这个定时任务默认每 50ms 执行一轮,检查每个分区在 1 秒的时间窗口内生产的消息量是否超过了预设的配额。

当检测到某个分区的生产配额被用尽,即出现限流情况时,服务端会采用软限流的方式进行处理。具体来说,服务端会关闭主题对应生产者的读 Channel,不再处理生产请求。不过,这种关闭并非永久性的,至多等待 1 秒后,服务端会重新恢复生产者的读 Channel,允许生产者继续处理发送消息的请求,直到再次出现限流。

从客户端的角度来看,当出现限流后,由于消息发送请求需要等待读 Channel 恢复才能被处理,发送耗时必然会增加。如果等待时间过长,就可能出现发送超时的情况。

消费端

消费端的限流逻辑同样是基于 1 秒的时间窗口,统计消费的 TPS 和带宽是否超过了配额。

当出现限流时,服务端会在 1 秒内停止推送消息到消费者。消费者在这段时间内无法接收到新的消息,这会导致消息从生产端到消费端的整体时延增加,因为消息在服务端被暂时扣留,无法及时传递到消费者手中。如果限流情况持续存在,就可能出现消息堆积的情况。

实践教程

  • 合理扩容分区:单主题分区有生产 / 消费的 TPS 和带宽限制,如果主题的 TPS / 带宽并发比较大,需要适当扩容分区。
  • 配置告警:配置主题的生产 / 消费的速率和流量已使用配额百分百的告警,当超过 80%,建议扩容分区数量,避免触发单主题分区限流。

常见现象说明

为什么分区的生产/消费流量可以超过限流阈值?

如上面限流原理所述,主题分区的限流采用的是非精确软限制的限流算法,结合生产端和消费端的限流逻辑,生产和消费都可能出现流量超过限流阈值的情况。

结语

TDMQ Pulsar 版的限流技术是保障其在复杂业务场景下稳定运行的关键因素。在实际应用中,用户需要深入理解限流机制的原理和特点,根据业务的实际需求和流量模式,合理地配置限流参数,如生产 / 消费速率、带宽限制、配额等。同时,要充分利用实践教程中的建议,做好集群规格的选择、告警配置以及分区扩容等工作,以确保系统在高负载情况下仍能保持高效、稳定的运行。

此外,对于常见现象的理解和应对也是至关重要的。通过对生产 / 消费带宽低于实例规格时触发限流、生产 / 消费峰值高于实例规格以及如何判断限流等问题的深入分析,用户能够更好地排查和解决实际应用中可能出现的问题,提高系统的可靠性和可用性。总之,合理运用 TDMQ Pulsar 版的限流技术,能够为分布式应用系统提供更加可靠的消息通信保障,助力业务的稳健发展。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云中间件 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档