You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Infinispan写入过快抛出MissingBackpressureException求助

解决Infinispan Write Behind模式下的MissingBackpressureException问题

问题描述

当写入速度达到每秒数百条记录时,系统大量抛出MissingBackpressureException,搜索引擎中找不到Infinispan与该异常相关的解决方案,求解决思路。

环境配置

  • 测试版本:Infinispan 13、14
  • 部署方式:Infinispan嵌入在Wildfly 26中
  • 存储模式:jdbc-store采用Write Behind模式
  • 已尝试多种jdbc-store配置,均无效

根异常信息

Caused by: io.reactivex.rxjava3.exceptions.MissingBackpressureException: 因缺少请求,无法发送新分组(#128)。请确保下游始终能接收新分组,且每个分组都按顺序被消费,这样整个操作符才能继续执行。
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowableGroupBy$GroupBySubscriber.onNext(FlowableGroupBy.java:197)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowableMap$MapSubscriber.onNext(FlowableMap.java:69)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowableFilter$FilterSubscriber.tryOnNext(FlowableFilter.java:75)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowableFilter$FilterSubscriber.onNext(FlowableFilter.java:53)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowablePublish$PublishConnection.drain(FlowablePublish.java:312)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowablePublish$PublishConnection.onSubscribe(FlowablePublish.java:208)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowableFromIterable.subscribe(FlowableFromIterable.java:69)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowableFromIterable.subscribeActual(FlowableFromIterable.java:47)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15917)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15863)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowablePublish.connect(FlowablePublish.java:93)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowableAutoConnect.subscribeActual(FlowableAutoConnect.java:50)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15917)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowableFilter.subscribeActual(FlowableFilter.java:38)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15917)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:38)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15917)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowableGroupBy.subscribeActual(FlowableGroupBy.java:73)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15917)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:38)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15917)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowableFlatMap.subscribeActual(FlowableFlatMap.java:51)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15917)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15863)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.internal.operators.flowable.FlowableLastMaybe.subscribeActual(FlowableLastMaybe.java:39)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.core.Maybe.subscribe(Maybe.java:5375)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.core.Maybe.blockingSubscribe(Maybe.java:2989)
        at io.reactivex.rxjava3.rxjava//io.reactivex.rxjava3.core.Maybe.blockingSubscribe(Maybe.java:2960)
        at org.infinispan.persistence.jdbc@14.0.2.Final//org.infinispan.persistence.jdbc.common.sql.BaseTableOperations.batchUpdates(BaseTableOperations.java:202)

解决思路

1. 调整Write Behind批量参数

Write Behind模式下,过小的批量配置会导致频繁分组处理,触发背压。尝试:

  • 增大write-behind.batch-size(默认100,可尝试500或1000)
  • 调整write-behind.flush-interval,设置合理的刷新间隔,减少批量触发频率

2. 优化JDBC连接池

数据库连接不足会拖慢下游处理速度,引发背压:

  • 增大连接池max-pool-size,确保有足够连接处理批量写入
  • 调整idle-timeout和validation-timeout,避免连接耗尽或失效

3. 调整RxJava背压策略

异常源于RxJava分组处理的下游消费速度不足,可通过Infinispan系统属性调整:

  • 设置infinispan.persistence.jdbc.rx.backpressure.buffer-size增大缓冲区
  • 根据业务场景选择背压策略:infinispan.persistence.jdbc.rx.backpressure.drop(丢数据)或infinispan.persistence.jdbc.rx.backpressure.latest(保留最新数据)

4. 升级Infinispan小版本

检查是否有针对该问题的补丁,升级到对应大版本的最新小版本(如14.0.7.Final),可能修复RxJava背压相关bug

5. 限流写入速度

业务允许的话,在写入Infinispan前添加限流逻辑,控制每秒写入量,避免超过JDBC Store处理能力

6. 优化数据库性能

数据库写入瓶颈会导致下游阻塞:

  • 给表添加合适索引,避免写入锁表
  • 开启数据库批量写入优化,调整事务隔离级别
  • 排查数据库服务器CPU、内存、磁盘IO是否存在瓶颈

内容的提问来源于stack exchange,提问作者Seweryn Niemiec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:35:28