This maintenance release removes fastjson 1.x from the distribution (fastjson2 upgraded to 2.0.63 and DLedger bumped to 0.3.3.4), introduces a native RocksDB CqCompactionFilter with a cross-platform JNI shim, deprecates the legacy Broker DLedger mode, and delivers extensive stability and performance fixes across tiered storage, Lite Mode, Proxy, and the store layer.
Security & Dependencies
- [ISSUE #7703] Upgrade fastjson2 to 2.0.63 for security fixes by @lizhimins in #10715
- [ISSUE #10651] bump DLedger to 0.3.3.4 (maintenance line) by @RongtongJin in #10958
- [ISSUE #10641] Deprecate legacy Broker DLedger mode by @RongtongJin in #10642
New Feature (Native RocksDB Compaction Filter)
Introduced a native ConsumeQueue compaction filter backed by a cross-platform JNI shim, replacing the previous pure-Java filter and the shaded rocketmq-rocksdb dependency with the official rocksdbjni artifact.
- [ISSUE #10334] Support native CqCompactionFilter with cross-platform JNI shim by @lizhimins in #10335
- [ISSUE #10334] Make native CqCompactionFilter shim self-contained without rocksdbjni dependency by @lizhimins in #10371
What's Changed
Tiered Storage
- [ISSUE #10462] Add memory backpressure to dispatch by @lizhimins in #10470
- [ISSUE #10462] Fix concurrency bugs in tiered storage by @lizhimins in #10471
- [ISSUE #10462] Optimize thread pool sizes for commit and fetch executors by @lizhimins in #10472
- [ISSUE #10462] Improve error handling in tiered storage by @lizhimins in #10473
- [ISSUE #10462] Standardize log format across tiered storage module by @lizhimins in #10474
- [ISSUE #10462] Fix resource leaks and lifecycle issues in tiered storage by @lizhimins in #10476
- [ISSUE #10572] Add dual TTL policy for tiered storage read-ahead cache by @Houlong66 in #10573
Lite Mode
- [ISSUE #10253] Fix stale wildcardGroupMap entries caused by incorrect parsing during LiteTopic wildcard unregistration by @Kris20030907 in #10254
- [ISSUE #10345] fix: preserve lite topic for auto-renew receipt handles by @Kris20030907 in #10346
- [ISSUE #10384] Enforce Lite exclusive subscription eviction via server-side tombstones by @f1amingo in #10386
- [ISSUE #10387] Support runtime hot-reload of maxClientEventCount in LiteEventDispatcher.ClientEventSet by @f1amingo in #10388
- [ISSUE #10423] Optimize LiteConsumerLagCalculator.getLagCountTopK by deferring getStoreTimestamp to topK results only by @f1amingo in #10424
- [ISSUE #10450] Selective double-write in CombineConsumeQueueStore by @imzs in #10452
- [ISSUE #10453] Fix unexpected decrement of lmq counter by @imzs in #10454
- [ISSUE #10549] Fix lite topic reset offset: memory leak, FIFO block bypass, and offset-0 reset failure by @f1amingo in #10550
- [ISSUE #10560] Remove enableLiteEventMode config switch by @f1amingo in #10561
- [ISSUE #10569] Support Lite Simple Consumer on server side by @f1amingo in #10570
- [ISSUE #10615] Fix missing long-polling notification under CombineConsumeQueue selective double-write by @imzs in #10616
- [ISSUE #10622] Resolve ConsumerOffsetManager dynamically in LiteEventDispatcher by @f1amingo in #10623
- [ISSUE #10644] Add LMQ number gauge metric to Broker observability by @f1amingo in #10645
- [ISSUE #10722] Lite Topic may not be cleaned up when message store timestamp is unavailable by @f1amingo in #10723
Store & RocksDB
- [ISSUE #10344] Parameterize RocksDB CQ size amplification by @RongtongJin in #10344
- [ISSUE #10270] Make Pop RocksDB BlockCache size configurable via MessageStoreConfig by @lizhimins in #10271
- [ISSUE #10421] Fix Timer message rocksdb use wrong cache key by @echooymxq in #10422
- [ISSUE #10417] Fix stale minOffset after consumeQueue truncation by @chenxu80 in #10418
- [ISSUE #10521] Use madvise(MADV_RANDOM) to disable kernel read-ahead during correctMinOffset binary search by @lizhimins in #10523
- [ISSUE #10639] Reuse a per-thread scratch buffer in CommitLog.checkMessageAndReturnSize by @wang-jiahua in #10640
- [ISSUE #10813] Reduce temporary allocations in the LMQ append path by @ai-yang in #10814
- [ISSUE #10819] Correct misleading CommitLog buffer comment by @fuyou001 in #10820
- [ISSUE #10953] Clamp shifted message count range to queue bounds by @qianye1001 in #10954
- [ISSUE #10959] Fix RocksDBConsumeQueue.iterateFrom should reject offset below min offset by @ymwneu in #10960
- [ISSUE #9654] Optimize the bufferLocal size of the TimerMessageStore by @ymwneu in #9655
- [ISSUE #10713] Optimize ConsumerFilterManager register CPU consumption by @ymwneu in #10714
- [ISSUE #10515] Fix TransactionMetricsFlushService busy spin bug by @wang-jiahua in #10517
- [ISSUE #10375] Fix race condition between deleteTopic and FlushConsumeQueueService by removing getLifeCycle indirection by @f1amingo in #10376
- [ISSUE #10543] resolve data race in ServiceThread wakeup mechanism by @ShadowySpirits in #10544
Broker & HA/Controller
- [ISSUE #10578] Fix master election maxOffset comparator overflow by @Aias00 in #10578
- [ISSUE #10604] Fix TopicConfig DataVersion not persisted in split registration by @imzs in #10605
- [ISSUE #10446] Support batch deletion of topics and subscription groups in broker by @wang-jiahua in #10448
- [ISSUE #10435] Fix shared ClientChannelInfo preventing inactive channel expiry by @chuanxo in #10437
- [ISSUE #10438] Fix buildTopicConfigSerializeWrapper exposing live topicConfigTable reference by @chuanxo in #10439
- [ISSUE #10284] Fix consumerOffset deserialization error and add test by @ChineseTony in #10287
- [ISSUE #10457] Fix RocketmqColdCtr logger level by @brucelwl in #10447
- [ISSUE-10546] Add default implementation for rejectRequest() in NettyRequestProcessor by @f1amingo in #10547
- fix(common): compare message queue ids safely by @yuluo-yx in #10884
- fix(controller): compare partial broker identities safely by @yuluo-yx in #10886
- fix(controller): detect inactive raft masters by @yuluo-yx in #10885
- Improve ACL 2.0 authorization context handling by @dingshuangxi888 in #10925
Proxy & gRPC
- [ISSUE #10260] Reject delayed transactional messages in gRPC send path by @yx9o in #10261
- [ISSUE #10274] Fix ForwardMessageToDeadLetterQueue request mapping descriptor by @Kris20030907 in #10275
- [ISSUE #10276] Fix PopConsumerService changeInvisibilityDuration losing CK record when visibilityTimeout collision by @qianye1001 in #10277
- [ISSUE #10280] Restore opaque when proxy remoting forward fails by @yx9o in #10281
- [ISSUE #10297] Set brokerName for messages returned by proxy local POP path by @yx9o in #10298
- [ISSUE #10285] Fix preserve popTime when rebuilding AckResult by @yx9o in #10286
- [ISSUE #10510] Add gRPC server permit keepalive configuration by @RockteMQ-AI in #10516
- [ISSUE #10661] Unregister all producer topics on gRPC client termination by @yx9o in #10662
- [ISSUE #10827] fix(broker): spin for the lock on same-attemptId pop orderly retry to avoid empty response by @lizhimins in #10828
- [Fix #10460]: Pre-size ProxyContext map to avoid HashMap resize on request path by @HarshMehta112 in #10461
Client & Remoting
- [ISSUE #10613] Fix async request-reply RequestCallback firing multiple times by @wang-jiahua in #10614
- [ISSUE #10906] Prevent duplicate MQClientInstance creation by @qianye1001 in #10907
- [ISSUE #10025] Treat blank local serve address as unset by @Aias00 in #10663
- [ISSUE #10522] Reduce Remoting header encoding allocation via FastCodesHeader/RocketMQSerializable optimizations by @wang-jiahua in #10522
- [ISSUE #8262] Fix bitsarray off by one by @SummCoder in #10506
- fix: validate message batch input by @gaoxiaolei-s59 in #10459
- [ISSUE #10247] Remove duplicate remove call in InvocationChannel by @yx9o in #10248
Index & Query
- [ISSUE #10268] Fix incorrect time range file selection in IndexStoreService.queryAsync by @lizhimins in #10269
- [ISSUE #10291] fix queryMessage default index type by @yuz10 in #10292
Observability & Stability
- [ISSUE #10266] Fix OOM caused by OpenTelemetry 1.44 OtlpGrpcMetricExporter pool race by @Houlong66 in #10267
- [ISSUE #10398] Fix native memory leak on TLS certificate hot-reload by @qianye1001 in #10399
- [ISSUE #10216] Fix potential NPE in EscapeBridge when topicPublishInfo is null by @SGloria in #10507
- [ISSUE #10419] Fix NPE when class filter route data is missing by @yin-bo-Final in #10420
- [ISSUE #10492] Add debug logging for swallowed exceptions in StatsAllSubCommand by @SGloria in #10493
- [ISSUE #10441] Reduce per-RPC allocation in metrics by caching static AttributeKey instances by @wang-jiahua in #10443
Performance
- [ISSUE #10467] Reduce per-message allocation in createUniqID and valueOfMagicCode by @wang-jiahua in #10469
- [ISSUE #10400] Cache Version.values() in MQVersion to avoid repeated array allocation by @qianye1001 in #10401
- [ISSUE #10511] Replace Enum.values() loop with static array lookup in LanguageCode and SerializeType by @wang-jiahua in #10513
- [ISSUE #10486] Add getMessageType(Map) overload to eliminate redundant properties decode by @wang-jiahua in #10487
Configuration & Extensibility
- [ISSUE #10381] Make HashedWheelTimer parameters configurable in QueueLevelConsumerOrderInfoLockManager by @f1amingo in #10382
- [ISSUE #10425] Revert split registration dataVersion change by @RongtongJin in #10426
- [ISSUE #10817] Upgrade SpotBugs for JDK 21 compatibility by @fuyou001 in #10818
- Classify BrokerShutdownTest as a medium Bazel test by @fuyou001 in #10821
Testing & CI
- [ISSUE #10341] Fix Bazel CI build failure caused by Maven Central rate limiting by @lizhimins in #10342
- [ISSUE #10373] Quarantine flaky tests and add detection plan docs by @lizhimins in #10374
- [ISSUE #10373] Fix quarantined flaky tests and remove CI rerun workflow by @lizhimins in #10379
- [ISSUE #10383] Align Bazel dependencies with Maven pom.xml by @lizhimins in #10404
- [ISSUE #10389] Fix or ignore several flaky tests of PopPriorityIT by @imzs in #10390
- [ISSUE #10410] Fix RocksDBOptionsFactoryTest compile failure by @RongtongJin in #10411
- [ISSUE #10430] Add unit tests for srvutil package by @lsq3497 in #10431
- [ISSUE #10475] Add unit tests for CleanupPolicyUtils by @quzizii in #10475
- [ISSUE #10562] Optimize PopConsumerServiceTest#transferToFsStoreTest to avoid unnecessary background threads by @f1amingo in #10563
- Fix flaky HATest semi-sync replication by @RongtongJin in #10495
- Configure GitHub workflows to use concurrency cancel-in-progress by @apupier in #10445
Documentation
- [ISSUE #10393] Fix outdated FAQ documentation URL in FAQUrl by @majialoong in #10394
- [ISSUE #10593] Rename CLusterSendMsgRTCommand to ClusterSendMsgRTCommand by @yx9o in #10594
- [DOCS] Update example dependency version from 4.3.0 to 5.5.0 by @H145608 in #10349
- [DOCS] Update Chinese docs dependency version from 4.3.0/4.9.1 to 5.5.0 by @H145608 in #10358
- [DOCS] Fix typo in Troubleshooting.md filename by @H145608 in #10360
- [DOCS] Fix typos in documentation filenames by @quzizii in #10505
- docs: fix broker IP typo in startup examples by @gaoxiaolei-s59 in #10440
- docs: fix broker container reference and producer typos by @gaoxiaolei-s59 in #10449
- docs: fix inaccurate examples and typos across developer guides by @lsq3497 in #10456
- docs: remove dead Slack invite link from README by @fancy-agent in #10483
- docs: fix dead link to tiered store config in tieredstore README by @fancy-agent in #10484
- docs: format README for consistent Markdown style by @skant7 in #10551
- Fix outdated constructor signatures in trace documentation by @SummCoder in #10501
- Update ACL mqadmin commands in Chinese doc Section 7 by @SummCoder in #10504
Full Changelog: rocketmq-all-5.5.0...rocketmq-all-5.5.1