Elasticsearch Transform 预计算性能对比报告 设计方案
在 Elasticsearch 中,Transform 预计算 是一种将原始数据流按维度聚合并持久化到目标索引的 ETL 方式,广泛用于实时大屏、报表系统、降频存储等场景。
为了评估其性能优势,我们设计并执行了一份 Elasticsearch Transform 预计算性能对比报告,对比以下三种聚合方式:
- 实时聚合(On-the-fly Aggregation)
- Transform 预计算 + 查询汇总索引
- 外部 ETL(Flink + 写入 ES)
一、测试目标
二、测试环境
events-raw-*
,每日 1 亿文档events-summary
(Transform 输出)user_id
, action
, amount
, timestamp
)user_id
分组,统计 count
、sum(amount)
三、测试方案
1. 方案 A:实时聚合(Baseline)
- 查询原始索引;
- 每次执行
terms
聚合; - 不使用缓存。
GET /events-raw-2024-06-01/_search{ \"size\": 0, \"aggs\": { \"top_users\": { \"terms\": { \"field\": \"user_id\", \"size\": 100 }, \"aggs\": { \"total_amount\": { \"sum\": { \"field\": \"amount\" } } } } }}
2. 方案 B:Transform 预计算
- 使用 Transform 每 5 分钟聚合一次;
- 查询目标索引
events-summary
。
PUT _transform/user-summary{ \"source\": { \"index\": \"events-raw-*\" }, \"pivot\": { \"group_by\": { \"user_id\": { \"terms\": { \"field\": \"user_id\" } } }, \"aggregations\": { \"event_count\": { \"value_count\": { \"field\": \"action\" } }, \"total_amount\": { \"sum\": { \"field\": \"amount\" } } } }, \"dest\": { \"index\": \"events-summary\" }, \"frequency\": \"300s\", \"sync\": { \"time\": { \"field\": \"timestamp\", \"delay\": \"60s\" } }}
查询:
GET /events-summary/_search{ \"sort\": { \"total_amount\": \"desc\" }, \"size\": 100}
3. 方案 C:外部 ETL(Flink Job)
- 使用 Flink 消费 Kafka 数据;
- 每 5 分钟窗口聚合;
- 写入
events-summary-flink
索引。
聚合逻辑与 Transform 相同。
四、性能测试结果
五、关键结论
✅ 1. Transform 预计算显著提升查询性能
- 查询延迟从 1.25s → 45ms,提升 28 倍
- QPS 从 120 → 2,500,提升 20 倍以上
适用于高并发、低延迟场景(如大屏、API 服务)
✅ 2. 资源消耗大幅降低
- 实时聚合频繁触发
fielddata
加载,导致内存压力大、GC 频繁; - Transform 和 Flink 方案查询的是固定结构的汇总索引,资源消耗极低。
✅ 3. 数据延迟可接受
- Transform 延迟 =
frequency + delay
= 300s + 60s = 6 分钟 - 对“实时大屏”类场景足够;
- 若需更低延迟,可设
frequency: 60s
。
✅ 4. Transform vs Flink:平衡性能与运维成本
✅ 结论:
- 80% 场景推荐使用 Transform:开发快、运维简单、性能足够;
- 超高性能或复杂逻辑场景使用 Flink。
六、适用场景推荐
latest
模式)七、优化建议
✅ 对 Transform 的优化
- 使用
composite
聚合避免大terms
内存溢出; - 合理设置
frequency
和delay
; - 目标索引提前建模,避免动态映射;
- 监控
transform.checkpoint.duration
,避免积压。
八、可视化图表(摘要)
查询延迟对比(P95)┌─────────────────────────────────────────────────────┐│ ││ 实时聚合: █████████████████████████████████ 1250ms ││ Transform: █ 45ms ││ Flink: █ 38ms │└─────────────────────────────────────────────────────┘QPS 对比┌─────────────────────────────────────────────────────┐│ ││ 实时聚合: ████ 120 QPS ││ Transform: █████████████████████████ 2500 QPS ││ Flink: ████████████████████████████ 3000 QPS │└─────────────────────────────────────────────────────┘
九、总结
✅ 最终结论:
对于绝大多数聚合分析场景,Elasticsearch Transform 是性价比最高、最易落地的预计算方案。它在性能、稳定性、开发效率之间取得了极佳平衡。