TDengine 3.3.5.8 版本解析:连接器生态、taosX 备份与查询正确性修复全览
【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine
TDengine 3.3.5.8 于 2025-02-28 发布,是 3.3.5 维护序列中的一个重要小版本。本篇基于官方发布说明 3.3.5.8 版本说明,逐条梳理该版本的 5 项新特性、16 项优化与 32 项缺陷修复,并结合当前仓库源码,对其中具有工程价值的变更(如keep_time_offset参数解析、连接器行为变化)做源码级印证,帮助版本升级者准确评估影响面。读完本篇,你可以快速判断:3.3.5.8 对你使用的连接器(JDBC/ODBC/Python/Rust/Flink)、数据同步(MQTT/Kafka/CSV/TMQ/taosX)以及高可用场景(双副本、mnode Leader 切换)分别带来了哪些行为变化。
版本概况
| 项目 | 内容 |
|---|---|
| 版本 | 3.3.5.8 |
| 发布时间 | 2025-02-28 |
| 新特性 | 5 项 |
| 优化 | 16 项 |
| 缺陷修复 | 32 项 |
从变更密度看,本版本的重心有三块:连接器生态的能力补齐(JDBC、ODBC、Rust、Python、Flink)、taosX 备份恢复链路的可靠性加固(平滑升级、异常重试、S3 配置缺陷),以及查询正确性问题的集中修复(JOIN、插值、DISTINCT、CAST 精度、双副本写入等)。
新特性
JDBC 支持 ONLY META 订阅
JDBC 连接器新增对 ONLY META 模式数据订阅的支持。在 ONLY META 模式下,订阅结果仅返回元数据(如表结构、标签变更),不携带实际数据块,适合监听库表结构变更、做元数据同步的场景。此前该类能力在其他客户端通道中已有,本版本补齐到 JDBC。
Grafana 插件 SQL 编辑支持多行
TDengine Grafana 数据源插件的 SQL 编辑器支持多行输入,长查询不再受单行编辑限制,提升可视化查询的编写体验。
ODBC 支持 VARBINARY/GEOMETRY 类型,并支持 Excel 直连
本版本对 ODBC 连接器有两项直接相关的增强:
- ODBC 新增对
VARBINARY与GEOMETRY两种数据类型的支持,二进制负载与空间数据可以经标准 ODBC 通道读出; - 支持 Excel 通过 ODBC 驱动直接连接 TDengine,即可以把 TDengine 数据源作为 Excel 外部数据源接入,用于轻量报表场景。
taosX agent 支持指定本地端口
taosX 的 agent 组件新增本地端口指定能力,便于在单机多实例、端口冲突或容器化部署中显式约束监听端口,减少默认端口探测带来的不确定性。
优化项:按组件归类解读
连接器行为增强
- WebSocket 订阅消息为空时可获取错误:此前 WebSocket 连接在订阅结果为空时无法拿到错误信息,本版本打通了错误回传路径。Rust 连接器同步获得了“订阅结果为空时的错误处理”能力,两个客户端通道的行为趋于一致。
- JDBC 支持无符号整数:JDBC 读取链路对无符号整数类型的处理得到增强。
- ODBC
SQLSetStmtAttr支持SQL_ROWSET_SIZE属性:标准 ODBC 语句属性SQL_ROWSET_SIZE现可正常设置,利于依赖该属性做行集控制的通用 ODBC 应用适配 TDengine。 - 参数绑定 SQL 中
LIMIT支持?占位符:在预编译语句中,LIMIT子句现可以使用?作为参数占位符(例如SELECT ... LIMIT ?, ?),分页查询的预编译写法更完整。 - Flink 连接器支持
BinaryRowData传输类型:数据在 Flink 内部以BinaryRowData形态传输,减少序列化/反序列化拷贝,提升高吞吐场景下的传输效率(此为 Flink 生态通用做法,具体收益以实际负载为准)。 - Flink 连接器 Table 支持更新和删除操作:TDengine 在 Flink 中作为动态表(Table)使用时,本版本支持 update 与 delete 语义,扩展了它在流式 ETL 中承担“可写目标表”的能力边界。
- Explorer float 显示精度与 taos shell 一致:Explorer 工具中小数显示精度与命令行客户端对齐,避免同一份数据在两处显示不一致带来的困惑。
数据同步与备份链路
- MQTT/Kafka/CSV 数据源新增写并发参数:三类外部数据同步通道均新增写并发(writer 数量)配置项,可针对吞吐瓶颈调高并发;同批 TMQ 数据同步任务也新增了 Number Of Writers/Consumers 等参数,写入与消费侧并发均可显式控制。
- 开源版 TDengine 支持与 TDgpt 对接:开源版本打通与 TDgpt 智能分析服务的对接链路。仓库中即包含 TDgpt 的完整工具链与部署资产,如 tdgpt 目录 及其 README,以及面向容器化的 DockerfileTDgpt,可对照仓库了解对接方式。
- taosX 备份开启 WebSocket 压缩:备份传输链路启用 WebSocket 压缩,降低跨节点备份流量的带宽占用。
- taosX Agent 在 taosX 无法连接时可重试恢复:Agent 侧增加断连重连与重试恢复逻辑,备份/恢复任务在 taosX 临时不可用时具备自动恢复能力,而不是直接失败退出。
- mac 安装包增加连接器文件:macOS 安装包补齐连接器相关文件,减少安装后手动补齐依赖的操作。
- TSBS 支持生成 CSV 文件:仓库内 tsbs-tdengine 工具 用于向 TDengine 写入 TSBS 工作负载数据,本版本增加以 CSV 形式生成/导出数据的能力,便于结果比对与离线分析。
- TDinsight 添加连接分类信息:TDinsight 运维展示侧补充了连接分类信息,便于按类别观察连接分布。
缺陷修复:按影响面归类
本版本共 32 项修复,覆盖 Explorer、taosX、ODBC/JDBC 连接器、同步任务、集群高可用与查询正确性。以下按主题归类,并标注对升级者最关键的几条。
集群高可用与元数据
- 双副本数据库在某个 dnode 断网后写入数据失败的问题:复制组中单节点网络中断时的写入可用性恢复,属于高可用场景的关键修复;
- 查询
information_schema.ins_tables时 mnode Leader 变更可能触发 “Sync leader is unreachable” 错误:系统表查询在 mnode Leader 切换场景下的稳定性; - 删除流计算时可能的死锁:流任务删除路径的死锁消除。
数据同步与备份任务(taosX / 数据源)
- taosX 平滑升级;
- 使用 taosX 恢复数据时,若未指定数据库,系统可能崩溃(已修复);
- taosX 任务写入中断后未重新启动(已修复);
- taosX 备份任务显示备份点重复(已修复);
- 备份计划未启动时查看备份点列表不符合预期(已修复);
- 数据源任务不再处理数据时健康状态恢复为 Idle(已修复);
- AWS 云存储下 taosAdapter flock 失败(已修复);
received/processed_messages当前运行指标重启后未清零(已修复);- 配置项
s3BucketName被误设为全局变量参数,导致文件上传到 S3 失败(已修复):该缺陷影响 S3 对象存储下的备份文件上传,使用 S3 后端做备份的用户应优先升级。
查询正确性
这是本修复批次中对结果可信度影响最大的一类:
- 数据重新整理后,涉及复合主键的时间过滤查询结果错误(已修复);
- 主键列连接条件为非简单等值条件时,JOIN 结果可能错误(已修复);
- 在超级表上执行 JOIN 查询时,子查询作为右表可能导致结果缺失(已修复);
- 同时使用
DISTINCT与ORDER BY时的语法错误(已修复); CAST浮点数为字符串后比较可能因精度丢失导致结果不准确(已修复);- 使用
interp插值填充时,select list 含字符串常量或字符串标签列,返回的字符串内容可能缺失(已修复); WHERE tbname IN (...)筛选出的子表不属于同一超级表时,执行LAST查询可能导致 taosd 崩溃(已修复);- 使用
WHERE tbname IN ()语句时的同类崩溃场景同样得到修复; - 修改子表中布尔类型标签的值时,数据订阅元数据返回结果存在错误(已修复);
- 参数绑定场景下相关行为修复,详见上一条 JOIN/等值条件项。
连接器与客户端
- ODBC 调用
SQLSetConnectAttr设置SQL_ATTR_TXN_ISOLATION时 core dump(已修复); - JDBC
select server_version()结果未释放导致内存持续增长(已修复); - Python WebSocket 连接器
Cursor.fetchmany自定义长度问题(已修复); - websocket 接口
timing字段有时为负值(已修复); - 参数绑定 SQL 语句中
LIMIT子句支持使用?作为参数占位符(与前述优化项配套)。
引擎启动与资源
- taosd 异常退出并再次启动后,如果未进入数据文件的 WAL 过大,可能导致启动时 OOM(已修复):重启场景下内存压力修复,对曾异常退出过且 WAL 较大的部署点意义重大;
- 从 3.3.4 升级到 3.3.5 后,若配置的字符集在系统中不存在,taosd 无法正常启动(已修复):跨大版本升级路径上的兼容性修复;
- stmtbind 线程在系统空闲时 CPU 占用过高(已修复);
Show Grants命令返回的列数目不正确(已修复)。
Explorer 与其他
- Explorer 注册邮箱支持包含 “.”(已修复);
- Explorer 导入 CSV 时列包含空格导致预览失效(已修复);
- 开源版本 TDengine 支持与 TDgpt 对接(见优化项);
- JDBC 示例代码安全漏洞(已修复,参考仓库 JDBC 示例目录)。
源码印证之一:keep_time_offset支持 h/d 后缀
修复清单第 12 条提到:“创建数据库时,keep_time_offset选项支持使用后缀 h 和 d 来指定时间值”。从源码结构看,该选项的校验逻辑位于数据库选项翻译模块 checkDbKeepTimeOffsetOption。其处理流程是:
- 对带时间单位的值节点做
translateValue翻译; - 校验单位字面量——源码中单位约束检查报错信息为“only %c allowed”,即解析层统一按小时量纲归一(
/60转换为分钟存储);3.3.5.8 的变更点在于接受h、d等更宽的后缀字面量,而不再仅接受单一单位写法; - 取值范围校验:常量定义于 tdef.h:
#define TSDB_MIN_KEEP_TIME_OFFSET 0 #define TSDB_MAX_KEEP_TIME_OFFSET 23即keep_time_offset的有效区间为[0, 23],超出即报Invalid option keep_time_offset语法错误。
该选项在系统表中的元数据定义位于 systable.c(.name = "keep_time_offset", .bytes = 4, .type = TSDB_DATA_TYPE_INT),因此SHOW DATABASES/information_schema相关视图中该列以 INT 呈现。测试侧可在 keep 相关用例 与 alter database 用例 中检索keep_time_offset的取值断言,作为升级后行为回归的参考。
升级提示:如果你在创建/修改数据库时使用了带时间后缀的keep_time_offset(例如以h结尾的写法),旧版本会报单位非法错误,3.3.5.8 起可按小时/天量纲直接书写。
源码印证之二:s3BucketName全局变量缺陷
修复清单最后一条指出“配置项s3BucketName被误设为全局变量参数,导致文件上传到 S3 失败”。从实现事实看,该缺陷的根因在变量作用域:桶名(bucket name)被错误地提升为全局变量参与参数处理,使得按任务/按连接维度设置的桶名不再生效,最终表现为 S3 上传失败。此类“连接级配置被全局变量覆盖”的缺陷对备份场景影响直接——多备份计划各自配置不同桶的场景会互相串扰。3.3.5.8 修复后,s3BucketName按预期以任务/配置维度生效。使用 S3/对象存储作为备份目标的部署,建议在升级后验证一次“新建备份计划 → 立即备份 → 确认对象出现在指定 bucket”的完整链路。
升级建议
- 使用者:若你使用 JDBC/ODBC/Python/Rust/Flink 任一连接器,或依赖 taosX 做备份恢复、MQTT/Kafka/CSV/TMQ 做数据同步,3.3.5.8 的修复项命中概率较高,建议纳入例行升级评估;
- S3 备份用户:
s3BucketName缺陷修复(第 32 条)与 AWS 云存储 flock 修复(第 2 条)均直接影响对象存储链路,属于“值得单独为此升级”的修复; - 双副本/多节点集群:dnode 断网写入、mnode Leader 切换、流删除死锁三项修复共同改善了异常网络下的稳定性;
- 查询正确性:涉及复合主键时间过滤、非等值 JOIN、超级表 JOIN、
DISTINCT + ORDER BY、interp字符串填充的历史错误查询,升级后建议用既有测试集回归比对结果; - 验证手段:仓库提供完整测试套件(如 test/cases 下的 02-Databases、09-DataQuerying、14-JoinQueries、17-DataSubscription 等目录)与 pytest 运行脚本,可对照本版本修复条目挑选相关用例做升级后回归。
小结
TDengine 3.3.5.8 是一次典型的“稳定性 + 连接器生态”版本:不引入新的破坏性变更,而是在 JDBC/ODBC/Flink/Rust 等客户端通道上补齐类型与错误处理能力,在 taosX 备份恢复与数据同步任务上系统性加固可靠性,并集中修复了 JOIN、插值、主键查询、双副本写入等一批查询正确性问题。对生产环境而言,结合 发布历史索引 中 3.3.5 序列的其余版本说明,可以完整规划 3.3.4 → 3.3.5.x 的升级路径;其中 3.3.4 升 3.3.5 时字符集不存在导致 taosd 无法启动的问题,也已在本版本修复。
【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考