企业级数据中台建设:TDengine 与 ClickHouse 的协同实践
摘要:在企业级数据中台建设中,时序数据的实时处理与离线分析是两个核心需求。本文介绍 TDengine 与 ClickHouse 协同构建的企业级数据平台架构,分析两款 database 在分层架构中的价值定位。
一、企业级数据中台的存储挑战
随着工业互联网和数字化转型的深入推进,企业面临的数据场景日益复杂。以某大型能源企业为例,其业务系统需要同时处理:
· 实时告警:设备异常需要秒级响应
· 趋势分析:历史数据用于预测性维护
· 多维报表:跨部门、跨时间维度的统计分析
· 合规审计:数据长期保留,满足监管要求
单一的 database 产品难以同时满足这些差异化需求。经过实践验证,采用 TDengine + ClickHouse 的分层架构,是更为务实的方案。
二、分层架构设计
2.1 架构概览
┌─────────────────────────────────────────────────────────────┐
│ 应用层 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ 实时监控大屏 │ │ 告警平台 │ │ BI 报表系统 │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ TDengine │ │ Kafka/ │ │ ClickHouse │
│ (实时层) │ │ 数据总线 │ │ (分析层) │
│ │ │ │ │ │
│ • 高频写入 │ │ • 数据同步 │ │ • 多维分析 │
│ • 实时查询 │────▶│ • 流式处理 │────▶│ • 离线报表 │
│ • 设备管理 │ │ • 数据缓存 │ │ • 数据挖掘 │
└───────────────┘ └───────────────┘ └───────────────┘
▲ ▲
└───────────────────────────────────────────┘
数据回流(聚合结果)
2.2 各层职责定位
|
层级 |
数据库 |
核心职责 |
数据特征 |
|
实时层 |
TDengine |
高频写入、实时告警、设备详情 |
原始数据,高频率 |
|
分析层 |
ClickHouse |
趋势分析、多维聚合、离线报表 |
聚合数据,低频率 |
三、实时层:TDengine 的实践
3.1 数据接入
-- 创建设备 telemetry 超级表
CREATE STABLE equipment_telemetry (
ts TIMESTAMP,
temperature FLOAT,
pressure FLOAT,
vibration FLOAT,
power_consumption FLOAT
) TAGS (
equipment_id BINARY(32),
workshop BINARY(32),
production_line BINARY(16),
equipment_type BINARY(16)
);
-- 高频写入示例
INSERT INTO eq_001 USING equipment_telemetry
TAGS ('EQ001', 'WORKSHOP-A', 'LINE-1', 'TURBINE')
VALUES (NOW, 450.2, 2.5, 0.03, 1250.5);
3.2 实时告警
-- 温度超限告警查询
SELECT equipment_id, temperature
FROM equipment_telemetry
WHERE ts > NOW - 10s AND temperature > 500;
-- 设备状态实时查询
SELECT LAST(*) FROM eq_001;
四、分析层:ClickHouse 的实践
4.1 数据同步
通过 Kafka 实现 TDengine 到 ClickHouse 的数据同步:
# 数据同步消费者
from kafka import KafkaConsumer
import clickhouse_driver
consumer = KafkaConsumer('telemetry-agg', bootstrap_servers=['kafka:9092'])
ch_client = clickhouse_driver.Client(host='clickhouse')
for msg in consumer:
data = json.loads(msg.value)
ch_client.execute(
"INSERT INTO analytics.hourly_stats VALUES",
[data]
)
4.2 复杂分析
-- ClickHouse 多维分析查询
SELECT
toStartOfHour(hour) as time_bucket,
workshop,
production_line,
avg(avg_temperature) as avg_temp,
max(max_temperature) as max_temp,
quantile(0.95)(avg_vibration) as p95_vibration,
countIf(max_temperature > 500) as alert_count
FROM analytics.hourly_stats
WHERE hour > now() - INTERVAL 30 DAY
GROUP BY time_bucket, workshop, production_line
ORDER BY time_bucket;
五、性能表现
在 100 万设备、日均 100 亿条数据的企业级场景中:
|
场景 |
TDengine |
ClickHouse |
|
单设备写入 |
0.5ms |
- |
|
实时告警查询 |
< 10ms |
- |
|
小时级聚合(1000设备) |
15ms |
- |
|
30天趋势分析 |
- |
200ms |
|
跨车间对比分析 |
- |
500ms |
|
复杂多维报表 |
- |
2s |
六、企业级特性
6.1 高可用设计
-- TDengine 三副本配置
CREATE DATABASE realtime REPLICA 3 KEEP 90d;
-- ClickHouse 副本表
CREATE TABLE analytics.hourly_stats_replica
ON CLUSTER 'cluster_1'
AS analytics.hourly_stats
ENGINE = ReplicatedMergeTree(...);
6.2 数据一致性保障
· 实时层:TDengine 强一致性写入,确保告警数据准确
· 分析层:ClickHouse 最终一致性,满足报表分析需求
· 同步链路:Kafka 持久化,确保数据不丢失
七、与华为云生态集成
该架构已与华为云深度集成:
· 华为云 CCE:Kubernetes 容器平台部署 TDengine 和 ClickHouse
· 华为云 Kafka:托管消息队列,保障数据同步稳定性
· 华为云 OBS:冷数据归档,降低长期存储成本
· 华为云 DWS:与数据仓库对接,支持更复杂的数据分析
八、总结
TDengine 与 ClickHouse 的协同架构,充分发挥了各自的技术优势:
· TDengine 负责实时层的高频写入和即时查询,确保设备数据的及时处理和告警响应
· ClickHouse 负责分析层的复杂聚合和离线报表,提供强大的多维分析能力
这种分层设计虽然增加了架构复杂度,但在企业级大规模数据场景下,能够更好地满足差异化的数据处理需求。对于正在构建数据中台的能源、制造、交通等企业,这种协同架构值得参考。
在企业数字化转型的道路上,选择合适的技术组合,构建分层解耦的数据架构,是提升数据竞争力的关键。
- 点赞
- 收藏
- 关注作者
评论(0)