ClickHouse、Doris、Trino(原Presto)和Flink的组合可构建一套高性能的“流批一体”数据处理架构,兼顾实时计算、批量分析、交互式查询与数据服务能力。
一、架构分层与组件定位
架构层 | 核心组件 | 核心职责 | 技术优势 |
---|---|---|---|
实时处理层 | Flink | 流式数据清洗、窗口聚合、复杂事件处理(CEP)、状态管理 | 低延迟(毫秒级)、Exactly-Once语义、状态容错 |
批处理层 | Trino | 离线数据ETL、跨源联邦查询(Hive/Iceberg/MySQL)、大规模批处理 | 联邦查询能力、兼容ANSI SQL、动态扩展计算节点 |
OLAP存储层 | ClickHouse/Doris | 高性能存储与实时分析:ClickHouse强于单表聚合,Doris擅长多表关联与更新 | ClickHouse:列存+向量化引擎;Doris:MPP架构+事务支持 |
数据服务层 | 统一API网关 | 封装查询接口,对接BI工具或应用系统 | 统一鉴权、查询路由、结果缓存 |
✅ 组件协同逻辑:
数据流:Kafka → Flink(实时处理) → ClickHouse/Doris(存储) ← Trino(批量分析/联邦查询) → API/BI
二、核心协同场景与技术实现
1. 实时数仓构建(Flink + OLAP数据库)
- 场景:电商实时大屏、IoT设备监控
- 流程:
- Flink消费Kafka原始日志,在DWD层进行数据清洗、维度关联(通过Async I/O访问Redis/HBase维表);
- 实时聚合结果写入ClickHouse(高吞吐写入)或Doris(支持Update/Delete);
- BI工具直连OLAP数据库生成秒级报表。
- 优化:
- Flink启用
RocksDB
状态后端,Checkpoint间隔调优(如1分钟); - ClickHouse采用
ReplacingMergeTree
引擎处理重复数据,Doris利用Unique Key
模型支持实时更新。
- Flink启用
2. 流批一体分析(Flink + Trino)
- 场景:T+1报表与实时指标校对
- 流程:
- Flink处理实时流写入Hudi/Iceberg表(批流统一存储);
- Trino联邦查询Hudi实时表与Hive离线表,实现历史与实时数据关联分析;
- 计算结果写入Doris提供统一查询服务。
- 优化:
- Flink写Iceberg时开启小文件合并;
- Trino配置动态过滤(Dynamic Filtering)加速JOIN。
3. 交互式即席查询(Trino + OLAP数据库)
- 场景:用户行为多维分析、广告效果回溯
- 流程:
- Trino直连ClickHouse执行快速聚合(如分省份UV统计);
- 复杂多表关联查询路由至Doris(优化器自动选择Join策略);
- 结果缓存至Redis降低OLAP负载。
- 优化:
- ClickHouse启用
MaterializedView
预计算高频指标; - Doris开启
Colocation Join
避免跨节点数据传输。
- ClickHouse启用
三、性能瓶颈与调优策略
瓶颈点 | 优化方案 |
---|---|
Flink反压 | 调整并行度、启用增量Checkpoint、异步访问外部维表 |
ClickHouse JOIN弱 | 转用Doris执行多表关联;或Flink预关联生成宽表再写入ClickHouse |
Trino跨源查询慢 | 使用Iceberg 统一存储格式;对Hive表分区裁剪 |
数据一致性保障 | Flink+Kafka实现端到端Exactly-Once;Doris开启两阶段提交(2PC) |
四、典型场景架构案例
案例:电商实时风控系统
- 实时流处理(Flink):
- 消费Kafka交易日志,通过Flink CEP识别异常交易模式(如10秒内多次下单);
- 实时计算用户画像分,写入Redis实时更新。
- 存储与查询(Doris):
- 存储历史交易明细,支持多维度关联查询(如“用户+设备+地理位置”组合分析);
- 利用物化视图加速高频风控规则计算。
- 离线分析(Trino):
- 联邦查询Doris与用户画像Hive表,生成风险模型训练集;
- 将模型特征回写Doris供实时调用。
⚙️ 资源分配建议:
- Flink集群:独立部署,与OLAP服务物理隔离(避免CPU竞争);
- Doris/ClickHouse:SSD存储+高内存配置(>128GB);
- Trino:计算节点按需扩展,优先分配内存资源。
五、选型决策树
graph TD
A[需要实时更新?] -->|是| B(Doris)
A -->|否| C{查询模式}
C -->|多表关联复杂| B
C -->|单表聚合为主| D[ClickHouse]
E[需联邦查询Hive/MySQL?] -->|是| F(Trino)
E -->|否| G[直接API查询OLAP]
决策说明:
- 实时更新+复杂分析 → Doris强事务模型;
- 海量日志分析+高压缩比 → ClickHouse列存优势;
- 跨源数据整合 → Trino联邦查询引擎。
六、总结与演进建议
该架构通过流批协同、多引擎互补实现全链路覆盖:
- 短期架构:以Flink+ClickHouse为核心处理实时流,Trino+Doris支持离线分析;
- 长期演进:
- 采用
Apache Iceberg
统一实时/离线存储格式,减少数据冗余; - Doris逐步替代ClickHouse承担复杂分析,利用其MPP架构优化多表关联;
- 探索Flink与Trino的深度集成(如Flink Batch替换Trino部分ETL)。
- 采用
💡 关键指标监控:
- Flink:Checkpoint耗时、背压率、Kafka Lag;
- OLAP:查询P99延迟、内存使用率;
- Trino:查询排队数、跨源扫描量。