This version introduces Lite Mode, a lightweight subscription mechanism designed for AI scenarios, alongside enhancements across Broker, Proxy, and client components.
New Feature (Lite Mode)
Introduced a lightweight subscription mode (Lite Mode) that delivers more efficient messaging with reduced resource consumption. This mode provides complete lifecycle management, event dispatching, subscription registration, message processing, and metrics monitoring. With the newly added Lite message processor, long-polling service, control handler, and corresponding protocol support, it establishes an efficient lightweight message subscription mechanism tailored for AI scenarios.
What's Changed
- [ISSUE #9780] Skip unnecessary RPC when topic has no message queues by @yx9o in #9781
- [ISSUE #9964] Rename intConfig method to initConfig by @yx9o in #9965
- [ISSUE #9962] Fix the failure of fastjson2 parsing metricsExporterType in proxy config by @yuz10 in #9963
- [ISSUE #9976] Update copyright year in NOTICE file to 2026 by @mxsm in #9977
- [ISSUE #9980] Skip invalid records when the group is absent in Pop by @lizhimins in #9981
- [ISSUE #9970] Refactor the MessageQueueSelector to support more flexible queue selection strategy by @qianye1001 in #9971
- [ISSUE #9994] Improve switchTimerEngine command with OptionGroup validation by @majialoong in #9995
- [ISSUE #9923] Transactional messages should not send custom delayed messages by @yx9o in #9924
- [ISSUE #9953] Fix: there's no need to decompress message body in server side by @humkum in #9954
- [ISSUE #9912] Reduce excessive requests for consumer offset timestamps in tiered storage by @lizhimins in #9991
- [ISSUE #9992] Fix remoting server netty server codec thread reuse problem by @ymwneu in #9993
- [ISSUE #9978] Remove static from loadJsonConfig and unify exception handling by @yx9o in #9979
- [ISSUE #9900] Support sending heartbeats to the broker concurrently by @Kris20030907 in #9901
- [ISSUE #9975] Bump broker rocksdb from 1.0.2 to 1.0.6 by @lizhimins in #10002
- [ISSUE #10005] Fix switch-case logic in updateConsumerOffsetAsync by @yx9o in #10006
- [ISSUE #10015] Optimize writeWithoutMmap: add page alignment to avoid read-modify-write by @guyinyou in #10016
- [ISSUE #9980] Skip invalid POP records when consumer group does not exist by @Gautam-aman in #9982
- [ISSUE #10023] Remove duplicate shutdown and rejection handler calls for routeThreadPoolExecutor by @Kris20030907 in #10024
- [ISSUE #10017] Validate commitlog offset in recoverAbnormally to prevent processing invalid data by @guyinyou in #10018
- [ISSUE #10031] Add PreprocessHandler interface in AllocateMappedFileService by @guyinyou in #10032
- [ISSUE #10019] Revert "[ISSUE #8127] Optimize the metric calculation logic of the time wheel" by @RongtongJin in #10020
- [ISSUE #10035] Fix: avoid extra padding when message end position is already page-aligned by @guyinyou in #10036
- [ISSUE #10040] Ignore flattened-pom.xml files generated by maven by @yx9o in #10041
- [ISSUE #10038] Fix checkCommitLogOffsetOnRecover to skip validation for BLANK_MAGIC_CODE by @guyinyou in #10039
- [ISSUE #9852] Print full message content when CRC not found in properties by @guyinyou in #9853
- [ISSUE #9988] Remove mismatched response header in getConsumerConnectionList by @yx9o in #9989
- [ISSUE #10043] Make TimerMessageReputService thread pool configurable and shutdown gracefully by @Kris20030907 in #10044
- [ISSUE #10021] Optimize consumer type check with EnumSet by @yx9o in #10022
- [ISSUE #10054] Correct the output format for ConsumerRecords by @yx9o in #10055
- [ISSUE #10050] Support ChangeInvisibleTime without incrementing message reconsume times by @ltamber in #10051
- [ISSUE #10034] Optimizing cq iterator and calculating lag by @lizhimins in #10056
- [ISSUE #9999] Mark custom delay time messages with delay type by @yx9o in #10000
- [ISSUE #10046] Fix lock leak risk in sendHeartbeatToBroker by @yx9o in #10047
- [ISSUE #10063] Notification request adds subscription expression to support on-demand wake-up by @qianye1001 in #10064
- [ISSUE #10068] Remove duplicate registration in DefaultMessagingProcessor.init by @yx9o in #10069
- [ISSUE #10071] Fix PopLiteLongPollingService#cleanUnusedResource by @f1amingo in #10072
- [ISSUE #10073] Fix StoreCheckpoint logicsMsgTimestamp to reflect flushed consume queues storetime by @guyinyou in #10074
- [ISSUE #10079] FlushConsumeQueueService: always flush store checkpoint after CQ flush by @guyinyou in #10080
- [ISSUE #10082] Missing PROPERTY_TIMER_DELAY_MS property check in delay message type validation by @dingshuangxi888 in #10084
- [ISSUE #10095] Upgraded Commons Lang3 to remediate CVEs by @shub-est in #10096
- [ISSUE #10086] Fix timer engine switch to persist correct config key by @Liu-ZhenYu in #10085
- [ISSUE #10093] Enhance delayed message type validation in batch send by @yx9o in #10094
- [ISSUE #10105] Fix ClassCastException in getLocks() method by @yx9o in #10106
- [ISSUE #10108] Broker startup fail in recover by @yuz10 in #10109
- [ISSUE #10110] Plain request process success and response fail when tlsMode=enforcing by @yuz10 in #10111
- [ISSUE #10107] Fix fastjson2 integer overflow when parsing AtomicLong by @yx9o in #10112
- [ISSUE #10061] Optimize the issue/pull request template of RocketMQ by @mxsm in #10062
- [ISSUE #10011] Optimize accelerated recovery process and refactor code by @RongtongJin in #10012
- [ISSUE #10159] Fix unstable tests in DefaultMQLitePullConsumerWithTraceTest by @yx9o in #10160
- [ISSUE #10077] Support password-encrypted private keys for Proxy TLS by @majialoong in #10078
- [ISSUE #10009] Add null-check log and convert internal-only public classes to inner classes by @sinberCS in #10028
- [ISSUE #10157] Fix tiered metadata leak after topic delete by @woaishixiaoxiao in #10158
- [ISSUE #10154] Rename BrokerConsumeStatsSubCommad to BrokerConsumeStatsSubCommand by @yx9o in #10155
- [ISSUE #10161] Reduce bytes copy by @ChineseTony in #10162
- [ISSUE #10168] Fix GetAllTopicConfigResponseHeader compatibility issue by @gaoyf in #10169
- [ISSUE #10103] Improve batch polling efficiency in pollIndexRecord method by @yx9o in #10104
- [ISSUE #10171] Support custom JAVA_HOME on Linux in runbroker.sh and runserver.sh by @majialoong in #10172
- [ISSUE #10181] Some minor fixes in PopConsumerService by @lizhimins in #10182
- [ISSUE #10195] Ensure RocksDB compatibility in slave-master synchronization by @gaoyf in #10196
- [ISSUE #10199] Fix stale write timestamp leads to duplicate transaction commit by @lizhimins in #10200
- [ISSUE #10201] Optimize queryOffset method overloads in IndexService by @yx9o in #10202
- [ISSUE #10221] Add RejectedExecutionHandler support for ThreadPoolMonitor by @ltamber in #10222
- [ISSUE #10229] Fix server-side reset offset does not take effect for FIFO (orderly) pop consumers by @qianye1001 in #10230
- [ISSUE #10223] Not query the index of system topics in tiered storage by @lizhimins in #10224
- [ISSUE #10003] Add gRPC maxConcurrentCallsPerConnection Configuration to Proxy by @qianye1001 in #10004
- [ISSUE #10165] Prevent RocksDB metrics from being overwritten after timer engine switch by @3424672656 in #10166
- [ISSUE #10076] Make orderly resetOffset wait on consume lock while preserving timeout semantics by @LystranG in #10175
- [ISSUE #10191] Fix wrong option value for namesrvAddr parsing in timer benchmark examples by @majialoong in #10192
- [ISSUE #10189] Remove unused fetchRemoteConfigExecutorService in MQClientInstance by @Kris20030907 in #10190
- [ISSUE #10183] Fix incorrect brokerName when constructing ProcessQueueTable with static topic by @Kris20030907 in #10184
- [ISSUE #10183] Fix exception when trying to release lock that was not successfully acquired by @Kris20030907 in #10186
- [ISSUE #10203] Support wildcard subscription and consumer suspend for LiteTopic by @f1amingo in #10204
- [ISSUE #10173] Support LMQ in CombineConsumeQueueStore without migration to RocksDB CQ by @imzs in #10174
- [ISSUE #10240] Add BatchSplittingMetricExporter to prevent OTLP gRPC export failures by @Houlong66 in #10239
- [ISSUE #10173] Improve PopLite: rename RocksDB CQ path and schedule autoClean by @imzs in #10242
- [ISSUE #9777] Use data version from master while sync slave and fix delete consume queue by @absolute8511 in #9778
- [ISSUE #10181] Remove lock when resetting offset in PopConsumerService by @lizhimins in #10250
- fix(store): close all consume queue file handles on ConsumeQueueStore shutdown by @RongtongJin in #10060
- forbid windows sync directory by @gaoyf in #10057
- Restore the lost PR 3460 by @gaoyf in #10067
- Remove some workflows by @RongtongJin in #10220
Dependency Upgrades
- Bump commons-validator from 1.7 to 1.10.0 by @Zjianru in #10081
- Upgraded LZ4 and migrated to newer group id by @shub-est in #10092
- Upgraded Bouncy Castle to remediate CVEs by @shub-est in #10102
- Upgraded Netty to 4.1.130.Final to remediate CVEs by @shub-est in #10090
New Contributors
- @Gautam-aman made their first contribution in #9982
- @shub-est made their first contribution in #10096
- @Liu-ZhenYu made their first contribution in #10085
- @Zjianru made their first contribution in #10081
- @LystranG made their first contribution in #10175
- @Houlong66 made their first contribution in #10239
Full Changelog: rocketmq-all-5.4.0...rocketmq-all-5.5.0