nats v2.12.3 正式发布:JetStream、Raft 与 MQTT 稳定性和性能的全面提

nats v2.12.3 正式发布:JetStream、Raft 与 MQTT 稳定性和性能的全面提升

nats-server v2.12.3 版本已于 2025 年 12 月 17 日正式发布。本次版本在保持与 2.11.x 系列兼容的前提下,对底层依赖、JetStream、Raft 共识机制、WebSocket 以及 MQTT 功能进行了大量优化和问题修复,是一次以稳定性、性能和健壮性为核心的维护型升级。以下内容基于官方更新日志,对 v2.12.3 的改动进行详细说明。

一、版本与基础环境更新
1. Go 版本
本次发布将构建所使用的 Go 版本升级至 1.25.5,为整体性能与运行时稳定性提供了更加坚实的基础。
2. 依赖库升级
多个关键依赖完成升级,包括:
• go-tpm 升级至 v0.9.7
• nkeys 升级至 v0.4.12
• golang.org/x/crypto 分别升级至 v0.45.0 和 v0.46.0
• golang.org/x/sys 升级至 v0.39.0
• klauspost/compress 升级至 v1.18.2
• antithesis-sdk-go 升级至 v0.5.0 的默认 no-op 版本
这些依赖更新主要集中在安全性、压缩性能以及系统调用兼容性方面。

二、新增功能
1. WebSocket 配置增强
在 WebSocket 配置块中新增了专用的心跳参数 ping_internal。该配置允许针对 WebSocket 连接单独设置 Ping 发送间隔,有助于更精确地控制连接保活策略,适合高并发或弱网络环境下使用。
三、功能改进
(一)JetStream 改进
1. 更快的源序列扫描
在设置带有 subject 过滤条件的 source 时,服务器对最后一条源消息序列的扫描速度显著提升,减少了流初始化和恢复过程中的等待时间。
2. Meta Layer 启动行为优化
在服务器启动时,Meta Layer 现在会对恢复操作进行分阶段处理并进行去重,而不再出现先快速应用再撤销冲突分配的情况,从而降低启动阶段的不稳定风险。
3. Interest-based Stream 性能提升
当 interest-based stream 存在较大兴趣空洞时,消费者兴趣检查逻辑得到了显著优化,大幅提高性能。
(二)MQTT 改进
1. 保留消息跨账号支持增强
当保留消息来源于不同账号并且带有 subject 转换时,现在可以正常工作,解决了此前在复杂账号结构下的使用限制。
四、问题修复
(一)通用问题修复
1. WebSocket 解压缓冲限制
修复了 WebSocket 连接在进行解压时未正确限制缓冲区大小的问题,有效避免潜在的内存风险。
(二)JetStream 与 Raft 相关修复
这是本次版本中修复内容最为集中的部分,主要集中在一致性、数据安全和集群稳定性上:

1. 修复因网关连接中 ACK 回复 subject 变换无效而触发的协议错误问题。
2. Meta Layer 仅在达到法定人数后才会响应 peer remove 请求。
3. 非终结型全通配符的非法 subject 过滤器不再产生异常匹配结果。
4. 修复集群模式下创建 Stream 时可能产生的数据竞争问题。
5. Raft 不再允许并发执行多个成员变更操作。
6. 修复在处理缺失节点或分配信息的快照时可能触发的 panic。
7. 在整块消息被 purge 时,subject 跟踪信息和定时消息能够正确更新。
8. Raft 在计算法定人数时不再统计已被移除节点的响应。
9. 修复 AsyncFlush 在进程暂停后可能导致 filestore 丢失写入的问题。
10. Filestore 在更新统计信息前会优先处理磁盘上的消息移除,提高错误处理可靠性。
11. Raft 法定人数计数逻辑重构,仅在 Leader 仍属于成员时才隐式计入确认。
12. 在处理 peer remove 时立即写入 peer 状态,避免重启后被移除节点意外重新出现。
13. DiscardNewPerSubject 保留策略现在由 Leader 在提议阶段统一执行,减少副本间状态不一致的可能。
14. Raft 不再允许移除仅剩的最后一个节点。
15. 修复 Stream 健康检查中的数据竞争问题。
16. 在 compact 或 purge 几乎为空的 Stream 到序列 2 时,能够正确写入 tombstone 用于序列恢复。
17. 修复在同时使用 skip sequence 与 compact 时可能导致块偏移错误并引发数据损坏的问题。
18. 当 compact 回收空间超过一半时,采用原子写入以避免进程被终止时丢失消息。
19. Filestore 查询在遇到缓存错误时会正确使缓存失效。
20. 改进消息块加载过程中的错误处理逻辑。
21. 新增 Raft 成员操作不再导致多数派被分裂。
22. Filestore compaction 不再出现 idx 缓存缺失错误,并能正确调整消息块的高低序列及删除映射。
23. 修复在 peer remove 与领导权转移期间,因心跳导致已移除节点被重新接纳的问题。
24. 修复在 Stream 快照期间可能发生的潜在数据不同步问题。
(三)MQTT 修复
1. MQTT 客户端的最大 payload 大小现在能够被正确限制。
2. 修复重新加载配置时,在无权限访问保留消息的情况下可能触发的 panic。
3. 修复在跨非 JetStream 启用服务器时,JetStream API 请求的账号映射问题。
4. QoS0 消息在跨账号 import/export 并带有 subject 映射时能够正确处理。
5. 修复服务器重启后因最后序列检查导致加载保留消息失败的问题。
6. 修复集群环境下可能导致保留消息损坏的缺陷。
7. 对 $MQTT. subscriptions 的权限处理进行了优化,默认隐式允许,仅 deny ACL 仍可进行限制。
8. 修复服务器重启后 QoS2 消息无法恢复获取的问题。
五、总结

nats v2.12.3 是一次以稳定性、性能和一致性为核心目标的重要更新。JetStream 在存储安全、恢复流程和高并发场景下的表现得到显著增强;Raft 在成员变更和法定人数计算方面更加严谨;MQTT 功能在集群和跨账号场景下的可靠性进一步提升。对于正在使用 2.11.x 或 2.12.x 早期版本的用户,该版本非常值得在充分验证后进行升级。
#大模型# #福大大架构师每日一题#
全部评论

相关推荐

2025-12-04 15:23
三峡大学 FPGA工程师
不知道怎么取名字_:玩游戏都写到简历上了啊
投递BOSS直聘等公司8个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务