用途:当生产者产生数据的速度超过消费者处理速度时,Backpressure 技能用于管理数据流,防止内存溢出(OOM)崩溃和数据丢失。
主要能力:提供有界缓冲(固定大小队列,防止无界增长)、水位线(阈值触发状态变化)、四种背压策略(BLOCK 阻塞、DROP_OLDEST 丢弃最旧、DROP_NEWEST 丢弃最新、SAMPLE 采样)以及自适应刷新(根据下游健康状况调整刷新速率)。状态机为 NORMAL(<50%)→ ELEVATED(50-80%)→ CRITICAL(80-100%)→ BLOCKED(100%),缓冲排空后回到 NORMAL。
使用方式:以 TypeScript 实现,核心类包括 BoundedBuffer 和 BackpressureController。创建控制器时传入刷新函数(如批量写入数据库)和配置项(maxBufferSize、highWatermark、lowWatermark、strategy、batchSize 等),调用 start() 启动处理,通过 push() 推送事件,关闭时调用 drain() 排空缓冲再 stop()。
适用场景:数据库写入慢于事件摄入、内存被排队项占满、需要优雅处理流量峰值、负载下希望丢弃低优先级数据。策略选择上,关键数据用 BLOCK,时间序列用 DROP_OLDEST,批处理任务用 DROP_NEWEST,遥测数据用 SAMPLE。
限制与注意事项:资料未提供安装命令、平台支持、收费或价格信息。最佳实践包括按可用内存设置缓冲大小、根据数据重要性匹配策略、监控丢弃率、关闭时排空缓冲、结合断路器保护刷新函数。常见错误包括使用无界队列、缺少丢弃指标、关闭时不排空、策略与数据重要性不匹配、缺少自适应速率调整。