标签#工控开发 #地铁ISCS #TDengine #时序数据库 #轨道交通综合监控摘要地铁ISCS综合监控系统海量设备测点高频上报、历史工况存储、故障回溯、大屏趋势曲线、运维报表均依赖专用时序数据库传统MySQL存储海量工控测点存在写入瓶颈、查询超时、磁盘占用过高、曲线渲染卡顿致命问题。本文承接前十三篇Kafka消息集群、上位智能采集器、数字孪生大屏全套架构基于国产化TDengine时序数据库搭建ISCS专属测点归档服务独立时序消费组消费Kafka原始测点、自动分线/分车站建库分表、冷热数据分层、测点批量入库、自动过期清理封装历史时段查询、极值统计、5min/15min均值聚合接口无缝对接第十三篇数字孪生大屏趋势图表、SOE故障追忆工况回放落地地铁工控时序存储规范解决海量测点入库雪崩、历史曲线加载缓慢、数据库运维复杂、工控数据过期冗余项目痛点全套代码贴合轨交项目国产化、高可用落地标准。一、前言前十三篇已完成GoA4全自动地铁ISCS端到端业务闭环现场OPC UA总线汇聚 → 上位智能采集器预处理 → Kafka分区消息生产 → 联动引擎业务消费、数字孪生大屏可视化消费实时采集、自动化联动、运维大屏可视化全部落地完毕。现阶段系统仅留存实时内存测点数据项目现场运维、验收、故障追忆硬性需求无法满足业务短板集中爆发1、风机、水泵、母线电压、温湿度模拟量测点无历史归档故障发生后无法回溯前置工况SOE事故追忆不完整2、数字孪生大屏短时趋势曲线无底层数据源仅能展示实时快照时段走势、极值数据无法渲染3、传统MySQL存储上万点位秒级数据单日数十亿条日志压垮数据库写入延迟、联表查询超时4、地铁运维需要日/周/月设备工况报表、负荷统计关系型数据库聚合统计耗时过长5、原始采集数据永久存储磁盘爆满、数据库索引崩溃无工控数据生命周期管控机制。结合地铁综合监控国产化改造、时序数据存储刚需本篇接入TDengine3.x国产化时序数据库搭建独立时序归档消费服务复用现有Kafka数据源、不改动采集、联动、大屏任意存量代码完成ISCS时序数据存储、聚合、查询、大屏对接全功能落地。二、全局闭环数据流业务消费组隔离2.1 完整版四消费组隔离架构最终定型架构现场硬件设备 → OPC UA边缘网关 → 上位智能采集器 → Kafka【iscs_point_real_data】主题✅消费组1Scene-Engine-Group —— 场景联动引擎自动化联动、跨子系统指令下发✅消费组2Screen-BigData-Group —— 数字孪生大屏服务实时WebSocket推送、拓扑渲染✅消费组3Td-Soe-Group —— TDengine时序归档服务本篇核心✅消费组4Alarm-Record-Group —— 告警归档、运维报表服务后续连载四大消费组 Offset独立、业务完全隔离、故障互不扩散地铁工控生产标准架构2.2 时序库业务流转流程1、时序专属消费组拉取标准化Kafka测点报文2、过滤补传冗余数据、校验测点合法性、剔除异常脏数据3、按【线路-车站-子系统】自动创建TDengine超级表、子表4、毫秒级批量时序入库绑定NTP统一时间戳5、后台自动冷热数据分离、过期数据自动清理6、对外封装标准化查询接口供给大屏趋势、SOE追忆、运维报表调用。2.3 TDengine选型地铁ISCS核心优势1、适配国产化服务器、国产操作系统满足军工/轨交国产化合规要求2、针对工控测点时序优化写入性能是MySQL10倍以上磁盘压缩比10:1节省服务器存储3、天然支持标签分组贴合ISCS线路、车站、子系统租户隔离架构4、内置均值、极值、方差时序函数无需代码聚合快速生成设备报表5、支持数据TTL生命周期配置自动清理过期运维数据零运维干预三、ISCS时序库库表设计贴合项目租户隔离3.1 库层级规划数据库iscs_point_history_db业务划分存储全线所有车站BAS/PSCADA/FAS/PSD/信号全测点历史时序数据TTL策略实时原始测点保留7天聚合均值数据保留90天贴合地铁运维规范3.2 超级表 Super Table 设计核心TDengine采用超级表子表架构无需手动建表程序根据stationId自动分表适配多线路多车站海量测点– ISCS综合监控测点时序超级表CREATE STABLE iscs_point_stable (ts TIMESTAMP,point_val DOUBLE,raw_val DOUBLE,point_status INT,event_desc NCHAR(64)) TAGS (line_id NCHAR(32),station_id NCHAR(32),system_type NCHAR(20),point_id NCHAR(40));3.3 字段业务释义ts全局NTP时间戳全线设备、服务时钟对齐SOE事故追忆时序基准point_val工程换算后标准数值对外业务展示、曲线渲染取值raw_valOPC UA原始采集数值溯源调试备用point_status测点状态 0正常 1超限故障 2链路离线Tags标签线路、车站、子系统、测点ID无损对接前期所有业务实体四、项目依赖yml专属配置4.1 Maven核心依赖com.taosdata.jdbc taos-jdbcdriver-spring-boot-starter 3.2.0 com.alibaba.fastjson2 fastjson2 ## 4.2 SpringBoot YAML双库配置MySQLTDengine共存时序归档服务专属配置spring:Kafka时序独立消费组配置kafka:consumer:group-id: iscs-tdengine-soe-groupbootstrap-servers: 127.0.0.1:9092max-poll-records: 300auto-offset-reset: earliestenable-auto-commit: falsetopic: iscs_point_real_dataTDengine时序数据库数据源datasource:tdengine:driver-class-name: com.taosdata.jdbc.TSDBDriverjdbc-url: jdbc:taos://127.0.0.1:6030/iscs_point_history_dbusername: rootpassword: ******时序数据TTL全局过期策略iscs:td:# 原始秒级数据保留7天raw-data-ttl: 7# 聚合小时数据保留90天agg-data-ttl: 90# 批量入库单次条数batch-insert-size: 200五、时序归档核心业务代码5.1 TDengine通用入库Mapper接口/**ISCS时序测点TDengine持久层自动建子表、批量插入时序数据*/Mapperpublic interface PointHistoryTdMapper {/**动态创建车站测点子表*/void createStationSubTable(Param(“subTableName”) String subTableName,Param(“lineId”) String lineId,Param(“stationId”) String stationId);/**批量批量插入全站测点时序数据*/int batchInsertPointHistory(Param(“list”) List dataList,Param(“subTableName”) String subTableName);}5.2 Kafka时序独立消费、批量入库服务/**TDengine时序数据专属消费服务业务隔离、脏数据过滤、批量时序入库*/ComponentSlf4jpublic class TdPointKafkaConsumer {private final PointHistoryTdService historyTdService;// 本地批量缓冲区积攒200条统一入库提升吞吐private final BlockingQueue dataBufferQueue;private final Integer BATCH_SIZE;public TdPointKafkaConsumer(PointHistoryTdService historyTdService,Value(“${iscs.td.batch-insert-size}”) Integer batchSize) {this.historyTdService historyTdService;this.BATCH_SIZE batchSize;this.dataBufferQueue new LinkedBlockingQueue(500);}/**时序库专属批量消费监听*/KafkaListener(topics “${spring.kafka.topic}”, batch “true”)public void consumePointRecord(ListConsumerRecordString, String recordList){List cacheList new ArrayList();recordList.forEach(record - {StandardPointKafkaMsg kafkaMsg JSON.parseObject(record.value(), StandardPointKafkaMsg.class);// 规则1过滤采集器离线补传数据时序库仅归档实时正常工况if(kafkaMsg.getPointStatus() 3){return;}// 规则2过滤无效空值测点减少数据库冗余存储if(Objects.isNull(kafkaMsg.getValue())){return;}cacheList.add(kafkaMsg);});// 写入本地缓冲区触发批量入库阈值dataBufferQueue.addAll(cacheList);if(dataBufferQueue.size() BATCH_SIZE){batchSaveToTd();}// 手动提交位移保证入库成功才消费位移commitOffset(recordList);}/**批量落地TDengine时序数据库*/private void batchSaveToTd(){List batchList new ArrayList();dataBufferQueue.drainTo(batchList);// 按车站分组批量入库贴合TDengine分表逻辑MapString,List stationGroupMap batchList.stream().collect(Collectors.groupingBy(StandardPointKafkaMsg::getStationId));// 分组入库 自动建表stationGroupMap.forEach((stationId,pointList) -{historyTdService.batchSavePointData(stationId,pointList);});}}5.3 历史曲线查询接口对接大屏SOE追忆/**对外暴露时序查询接口1、数字孪生趋势曲线调用2、SOE故障时段工况回放调用3、运维报表极值统计调用*/RestControllerRequestMapping(“/iscs/td/point”)public class PointHistoryQueryController {private final PointHistoryTdService historyTdService;GetMapping(“/list/time”)public ResultList queryPointTimeRange(RequestParam String pointId,RequestParam String startTime,RequestParam String endTime){List historyList historyTdService.queryPointTimeData(pointId,startTime,endTime);return Result.success(historyList);}/**时段最大值、最小值、平均值聚合接口大屏统计卡片、运维报表直接复用*/GetMapping(“/agg”)public Result queryPointAggData(RequestParam String pointId,RequestParam String timeType){PointAggVO aggVO historyTdService.getPointAggValue(pointId,timeType);return Result.success(aggVO);}}六、与数字孪生大屏、SOE引擎无缝对接方案6.1 孪生大屏趋势曲线对接1、前端大屏初始化调用时序聚合接口拉取1小时/24小时测点历史时序数据2、实时WebSocket推送实时测点 TDengine兜底历史数据曲线无缝衔接3、异常故障测点标红联动故障时段曲线高亮展示运维一眼定位异常6.2 SOE故障追忆对接联动引擎触发故障告警后绑定对应时间戳后台调取TDengine该时段全量测点历史值还原故障前5min、故障中、故障后设备完整工况满足地铁事故追忆验收标准。七、工控落地痛点现场解决方案痛点1MySQL存储时序数据磁盘爆满、查询缓慢方案替换TDengine时序库超高压缩比自动TTL清理磁盘占用降低85%千万级数据毫秒查询。痛点2Kafka大批量消息涌入单条入库压垮服务方案内存缓冲区按车站分组批量入库数据库IO压力大幅下降。痛点3多线路多车站测点混杂查询耦合、运维困难方案沿用全线lineId、stationId租户标签超级表天然分组隔离业务架构统一。痛点4服务重启、断网消费时序数据丢失方案Kafka消费组持久化Offset重启接续消费时序数据无断层、无丢失。痛点5大屏历史曲线加载超时、页面卡顿方案后台预聚合均值数据前端不用原始秒级点位渲染曲线渲染速度提升70%。八、运维部署工程规范1、TDengine服务独立部署时序服务器不和采集器、Kafka、业务服务混部2、开启数据库日志归档、定时快照备份适配地铁项目容灾备份要求3、HMI运维面板新增时序库监控入库速率、磁盘占用、消费堆积监控面板4、时序归档服务支持热重启、配置热加载无需停机影响全线业务5、贴合轨交国产化要求适配麒麟、统信国产操作系统部署。九、本篇总结本篇完成ISCS系统时序数据存储闭环敲定四大Kafka独立消费组最终生产架构基于国产化TDengine完成海量测点时序归档、自动分表、冷热数据管理、历史曲线、SOE工况回放全套功能。全文完全复用前文租户实体、Kafka配置、测点报文格式零改造存量代码完美对接第十三篇数字孪生大屏趋势图表、联动引擎故障追忆模块补齐ISCS实时业务历史存储双核心能力完全满足地铁全自动线路业主验收、运维调度、事故追忆全部需求。专栏连载说明本人8年轨道交通综合监控一线开发实战本专栏多篇文章官方社区收录整套GoA4地铁ISCS从底层采集、Kafka中台、联动引擎、孪生大屏、TD时序库全套工程方案连载完毕贴合项目落地、工控毕设开发。点关注持续追更