Apache IoTDB 新版本发布:V2.0.7 与 V1.3.7 功能解析与升级注意事项

8 min

概览

2026 年 3 月 4 日,Apache IoTDB 同时发布了 V2.0.7 和 V1.3.7。两个版本共享了一组相同的安全加固措施,但 V1.3.7 还额外包含了大量 bug 修复和性能优化(48 个提交 vs V2.0.7 的 16 个)。

本文从实际 GitHub Release 和提交记录出发,梳理以下内容:

  1. 两个版本的核心变更
  2. RPC 地址变更 — 升级最大的坑
  3. 其他值得关注的改动
  4. 版本选择与升级建议

参考来源:Apache IoTDB 公众号发布说明V2.0.7 Release NotesV1.3.7 Release Notes


两个版本共享的核心变更

V2.0.7 和 V1.3.7 包含相同的安全加固和配置调整:

变更项说明影响
RPC 默认地址改为 127.0.0.1客户端 RPC 服务默认只监听本地回环集群部署必须修改配置
移除高风险 RPC 接口删除存在安全隐患的 RPC 接口提升安全性
移除 JEXL 函数移除 Tree 模式下的内置 JEXL 函数使用 JEXL 的查询需改写
内部服务绑定优化内部服务绑定到 dn_internal_address 而非默认地址网络分层更安全
Pipe 命名检查创建 Pipe 时增加命名合法性校验防止非法字符导致运行时错误
分区表 TTL 删除修复修复仅 DB 级别 TTL 生效且使用最大值的问题Tree 模式下的 TTL 行为更准确

RPC 地址变更:升级最大的坑

这是本次升级最需要注意的变更

变更内容

# V2.0.6 / V1.3.6 及之前
dn_rpc_address=0.0.0.0    # 监听所有网络接口

# V2.0.7 / V1.3.7
dn_rpc_address=127.0.0.1  # 仅监听本地回环

对应的 PR:#17060 Change default dn rpc address

为什么要改

这是一个 Secure by Default 设计决策。当 rpcAddress=0.0.0.0 时,数据库会监听所有网络接口(包括公网接口),在未配置防火墙的环境下存在安全风险。改为 127.0.0.1 后,用户需要显式配置才能开放外部访问。

对不同部署场景的影响

单机部署 — 无影响,本地 CLI 连接 127.0.0.1:6667 正常工作。

集群部署必须修改配置,否则其他节点和远程客户端无法连接。

# 错误配置(升级后远程无法连接)
dn_rpc_address=127.0.0.1

# 正确配置(绑定实际 IP)
dn_rpc_address=192.168.1.10
dn_internal_address=192.168.1.10

Docker 部署 — 容器内需要保持监听所有接口:

services:
  iotdb:
    image: apache/iotdb:2.0.7
    environment:
      - IOTDB_DN_RPC_ADDRESS=0.0.0.0

常见故障现象

升级后如果出现以下错误,大概率是 RPC 地址配置问题:

Error: Connection refused

从其他机器执行 ./sbin/start-cli.sh -h <目标IP> 无法连接。

排查方法:

# 检查实际监听地址
ss -tlnp | grep 6667

# 如果显示 127.0.0.1:6667,说明需要修改配置
# 如果显示 0.0.0.0:6667 或实际IP:6667,说明配置正确

内部服务绑定优化

对应 PR:#16717 Bind real config address for Thrift and Raft services

此前内部 Thrift 和 Raft 服务可能绑定到默认地址(如 0.0.0.0),导致内部通信接口暴露在不必要的网络接口上。修改后,这些服务会绑定到 dn_internal_address 指定的地址,实现客户端流量与内部集群通信的网络分层:

  • dn_rpc_address — 客户端连接入口
  • dn_internal_address — 集群节点间通信

移除 JEXL 函数

对应 PR:#17092 Remove built-in jexl function in tree mode

JEXL(Java Expression Language)曾用于动态执行表达式,但存在代码注入风险且使用率低。移除后,原有的 JEXL 查询需要改写:

原 JEXL 用法替代方案
JEXL('value * 2')内置算术:value * 2
JEXL('sin(value)')内置函数:sin(value)
复杂业务逻辑自定义 UDF(Java 编译)

升级前建议检查

# 扫描查询日志中的 JEXL 使用
grep -i "JEXL" /path/to/query/logs/*.log

V1.3.7 额外的改进

V1.3.7 除了上述共享变更外,还包含大量 bug 修复和性能优化:

内存管理改进

  • 修复加载大量 TsFile 时的 GC 问题(#16853)— 改为分批加载,避免同时加载所有文件资源
  • 修复 IoTConsensus 队列中的内存泄漏(#16966
  • 修复查询排序索引的内存预留问题(#16959
  • 修复 TVList 所有权转移时的内存释放异常(#16943

查询引擎修复

  • 修复 Last 查询排序问题(#16956
  • 修复 MemTable 查询 bug(#16970
  • 修复插入全 null 对齐 Tablet 并 flush 后的查询错误(#17041
  • 修复 overlap unpack 在 endTime 为哨兵值时的错误(#16993

性能优化

  • 优化 MemTable Region Scan 效率(#16891, #16979
  • 优化 DeviceViewIntoOperator 为 Pipeline 风格(#16980
  • 移除 Schema Cache 中无用的 first key(#16881

Pipe 功能改进

  • 支持 Pattern Pruning 和冗余路径移除(#17059
  • 修复批量内存对 Pipe 内存管理不可见的 bug(#16962
  • 优化 Pipe 性能,禁用部分无用逻辑(#16916
  • DataNode 首次启动时清理 Active Load 监听目录(#16854

V2.0.6 中已修复的 CVE

以下安全漏洞已在 V2.0.6/V1.3.6 中修复(非本次版本):

  • CVE-2025-12183 — 安全漏洞修复
  • CVE-2025-66566 — 安全漏洞修复
  • CVE-2025-11226 — 安全漏洞修复

如果你还在使用 V2.0.5/V1.3.5 或更早版本,建议直接升级到最新版本以同时获得 CVE 修复和本次安全加固。


版本选择建议

场景推荐版本理由
新项目V2.0.71.3.x 已停止新功能开发
1.3.x 生产环境V1.3.7(过渡)+ 规划迁移 2.x获取安全修复,同时准备迁移
需要 Table 模型V2.0.7仅 2.x 支持 Tree + Table 双模型
需要 MATCH RECOGNIZEV2.0.7仅 2.x 支持
测试/开发环境V2.0.7使用最新版本

核心建议: 1.3.x 已进入维护模式,仅接收安全和关键 bug 修复。除非有无法克服的限制,否则应该选择 2.x 或规划迁移。


升级检查清单

升级前

# 1. 检查当前 RPC 配置
grep -E "rpc_address|internal_address" conf/iotdb-conf.properties

# 2. 检查 JEXL 使用情况
grep -i "JEXL" /path/to/query/logs/*.log

# 3. 检查集群状态
./sbin/start-cli.sh
> show datanodes;
> show confignodes;

# 4. 备份配置和数据
cp -r conf/ conf.backup.$(date +%Y%m%d)
cp -r data/ data.backup.$(date +%Y%m%d)

升级时

# 1. 先修改配置(集群部署必做)
vim conf/iotdb-conf.properties
# dn_rpc_address=<本机实际IP>
# dn_internal_address=<本机实际IP>

# 2. 停止服务
./sbin/stop-datanode.sh

# 3. 替换二进制文件

# 4. 启动服务
./sbin/start-datanode.sh

升级后

# 1. 验证连接
./sbin/start-cli.sh -h <实际IP>

# 2. 检查集群节点状态
> show datanodes;

# 3. 检查日志
tail -100 log/iotdb.log | grep -E "ERROR|WARN"

延伸阅读

参考资料