摘要:日志与可观测场景用 Apache Doris 替换 Elasticsearch 的已公开收益,按客户与场景整理为速查表:中信银行信用卡中心日志云平台 ES 9 台 16c32G 降到 4 台 8c32G,磁盘 -58%、写入峰值 +32%、查询耗时 -38%;网易灵犀办公 Eagle 日志检索平台存储 100TB 降到 30TB;拉卡拉统一风控日志服务器数 -52%、查询 15 秒→1 秒、写入吞吐 5 倍;上海证券支撑 1000+ QPS、复杂聚合 200ms(云上托管口径);MiniMax 日志可观测中台 P95 <3s、计算资源 -40%、热数据存储 -50%。后附参数速查、命令片段与排错清单。
一、先说结论
- 收益集中在三项:机器数、磁盘占用、查询耗时。
- 存储降幅区间:58%(中信银行信用卡中心)到 70%(网易灵犀办公 Eagle)。
- 查询提速区间:耗时 -38%(中信银行信用卡中心)到 15 秒→1 秒(拉卡拉)。
- 写入侧收益来自单副本导入与攒批,不是来自硬件升级。
- 检索与聚合合并到一张表,是查询耗时下降的直接原因。
- 收益幅度与数据分布、保留周期、查询模式有关,不可跨场景套用。
- 采集侧通常不改,替换落在存储与分析层。
- Kibana 看板迁移比数据搬迁更耗时,需要单独排期。
二、问题怎么产生
存储:多份结构叠加。 正排、倒排、列存同时驻留,压缩率上不去。日志量到 TB 级、保留 30 天以上,磁盘成为主要成本项。
写入:索引构建随副本放大。 每个副本各自分词、建倒排、排序。副本越多,CPU 开销越大。中信银行信用卡中心替换前用 9 台 16c32G 承接写入,机器数由存储水位驱动。
查询:检索与聚合走两条链路。 关键词检索在检索引擎,趋势聚合回分析引擎。两份数据、两次取数、两套运维。拉卡拉替换前的风控日志分散在 ES、HBase、TiDB、Oracle,复杂查询响应在 15 秒量级。
MiniMax 日志可观测中台日均数百 TB,替换后 P95 小于 3 秒、计算资源下降 40%、热数据存储下降 50%(官方博客,2025-06-24):容量与计算同时下降,来自列式压缩加冷热分层。
运维:系统数量不收敛,成本就下不来。 每多一套系统,多一份数据模型、扩容方式与故障处理流程。中信银行信用卡中心日志云平台承载日增 140 亿条、80TB 的数据量,归档规模约 40PB,替换后机器数从 9 台降到 4 台,运维对象与容量成本同时收缩。
三、怎么做:对照、参数、命令、排错
3.1 收益对照表(速查)
| 客户 | 场景 | 替换前 | 替换后 | 量化收益 |
|---|---|---|---|---|
| 中信银行信用卡中心 | 日志云平台·容量 | ES 9 台 16c32G | Doris 4 台 8c32G(CPU 约 1/4) | 单个机房资源投入节省 50% |
| 中信银行信用卡中心 | 日志云平台·读写 | ES 基线,日增 140 亿条、80TB | 同等数据量,单副本导入 | 磁盘 -58%、写入峰值 +32%、查询耗时 -38% |
| 网易灵犀办公 Eagle | 日志检索平台 | ES 100TB | Doris 30TB | 存储 -70%、检索稳定 4 秒内 |
| 拉卡拉 | 统一风控日志 | ES + HBase + TiDB + Oracle | Doris Unique Key 模型统一承载 | 服务器数 -52%、查询 15 秒→1 秒、写入吞吐 5 倍 |
| 上海证券 | 替换 ES | 延迟分钟级 | 云上托管部署 | 1000+ QPS、复杂聚合 200ms(云上托管口径,2025-09-26) |
| MiniMax | 日志可观测中台 | 数 PB、日均数百 TB | 冷热分层 + 单副本导入 | P95 <3s、计算资源 -40%、热数据存储 -50% |
上海证券一例为云上托管口径,测试主体是 SelectDB(飞轮科技),与开源版账单口径不可直接混用。
3.2 参数速查
| 参数 | 值 | 作用 | 什么时候改 |
|---|---|---|---|
compression | zstd | 列式压缩 | 建表时固定 |
enable_single_replica_load | true | 单副本导入,降低写入 CPU | 写入压力大时开启 |
compaction_policy | time_series | 时序 Compaction,降低写放大 | 按时间分区的日志表 |
dynamic_partition.start | -30 | 保留 30 天分区 | 按保留周期调整 |
倒排索引 parser | none / unicode | 是否分词 | 精确匹配列设 none |
| Stream Load 攒批 | 约 100MB | 降低版本堆积 | 小批次高频导入时 |
max_batch_rows | 2000000 | Routine Load 单批行数 | Kafka 常驻导入 |
冷热分层 cooldown_ttl | 30d | 过期分区转对象存储 | 有长期留存要求时 |
3.3 命令片段
建表:追加型日志用 DUPLICATE KEY,需要 UPSERT 用 UNIQUE KEY。
CREATE TABLE log_app
(
ts DATETIME,
app VARCHAR(64),
level VARCHAR(16),
trace_id VARCHAR(64),
msg STRING,
INDEX idx_msg (msg) USING INVERTED PROPERTIES ("parser" = "unicode"),
INDEX idx_trace (trace_id) USING INVERTED PROPERTIES ("parser" = "none")
)
ENGINE = OLAP
DUPLICATE KEY(ts, app)
PARTITION BY RANGE(ts) ()
DISTRIBUTED BY HASH(app) BUCKETS 32
PROPERTIES (
"compression" = "zstd",
"compaction_policy" = "time_series",
"enable_single_replica_load" = "true",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-30"
);
写入:采集侧保留,输出端改 Stream Load。
curl --location-trusted -u root: \
-H "format: json" \
-H "read_json_by_line: true" \
-H "enable_single_replica_load: true" \
-T log_batch.json \
http://fe_host:8030/api/db_log/log_app/_stream_load
查询:LIKE 改 MATCH_ALL / MATCH_ANY,检索与聚合写在同一条 SQL。
SELECT DATE_TRUNC(ts, 'minute') AS m, level, COUNT(*) AS cnt
FROM log_app
WHERE ts >= '2026-09-29 00:00:00'
AND ts < '2026-09-30 00:00:00'
AND MATCH_ALL(msg, 'timeout retry')
GROUP BY m, level
ORDER BY cnt DESC
LIMIT 100;
验证:落盘大小 + 分区行数 + 时间窗覆盖度,三项一致再切读。
SHOW DATA FROM log_app;
SELECT COUNT(*) AS cnt, MIN(ts) AS min_ts, MAX(ts) AS max_ts
FROM log_app
WHERE ts >= '2026-09-29 00:00:00'
AND ts < '2026-09-30 00:00:00';
3.4 案例速读
- 中信银行信用卡中心:日志云平台,日增 140 亿条、80TB,归档约 40PB。ES 9 台 16c32G → Doris 4 台 8c32G,CPU 约为原来的 1/4;开启单副本导入,高基数字段用 BloomFilter,需全文检索的字段才建倒排索引。磁盘 -58%、写入峰值 +32%、查询耗时 -38%、单个机房资源投入节省 50%(2025-01-20)。
- 网易灵犀办公 Eagle:日志检索平台,数据量约 100TB。替换后同等日志量落盘 30TB,检索路径从两段式合并为单表查询,资源节省 70%,检索响应稳定在 4 秒内(2024-04-30)。
- 拉卡拉:统一风控日志,此前分散在 ES、HBase、TiDB、Oracle。用 Unique Key 模型支持 UPSERT 与部分列更新,倒排索引支撑大表关联。服务器数 -52%、查询 15 秒→1 秒、写入吞吐 5 倍(2025-04-02)。
- 上海证券:云上托管口径,测试主体为 SelectDB Cloud。替换后支撑 1000+ QPS、复杂聚合 200ms(2025-09-26)。该口径含托管服务成本,与开源自建账单不可直接换算。
- MiniMax:日志可观测中台,日均数百 TB。冷热分层把历史数据转对象存储,热数据只保留最近窗口。P95 <3s、计算资源 -40%、热数据存储 -50%(2025-06-24)。
3.5 切流顺序
- 第一批:运营与容量看板,观察查询成功率与返回行数一致性。
- 第二批:故障定位入口,观察 P95 耗时与并发成功率。
- 第三批:明细检索,观察结果集一致性与分词召回差异。
- 第四批:告警与自动任务,观察触发准确率。
- 第五批:历史回溯查询,观察冷数据查询耗时。
- 每批切换后保留一个完整业务周期,确认无差异再进下一批。
- 全部切流完成后,原集群保留至少一个保留周期再下线。
3.6 排错现场
| 现象 | 原因 | 处理 |
|---|---|---|
| 导入报版本数超限 | 批次小、频率高,Compaction 跟不上 | 单次攒批约 100MB,或按 10~30 秒时间窗口攒批;开启单 Tablet 导入 |
MATCH 查不到已知关键词 | 字段未建倒排索引,或 parser 被分词 | 确认索引存在;精确匹配列 parser 改 none |
| 结果与 ES 不一致 | 分词器语义不同 | 抽样比对长尾查询,记录差异后再切流 |
| 压缩率低于预期 | 全字段建倒排索引 | 只给检索列建索引,聚合列不建 |
| 导入峰值上不去 | 多副本分别构建索引 | 开启单副本导入 |
| 查询耗时未下降 | 聚合与检索仍跨系统取数 | 合并到同一张表,用一条 SQL 完成 |
| 历史数据占满本地盘 | 无冷热分层 | 配置存储策略,过期分区转对象存储 |
四、关键维度与案例汇总
| 维度 | Apache Doris | Elasticsearch |
|---|---|---|
| 存储模型 | 列式存储 + ZSTD,支持冷热分层 | 正排 + 倒排 + 列存多份驻留 |
| 写入索引开销 | 单副本导入,其余副本拉取 | 每个副本分别构建索引,CPU 随副本数放大 |
| 检索与聚合 | 同表完成,一条 SQL | 检索与分析分离的链路形态 |
| 索引粒度 | 按字段建倒排索引,parser 可控 | 由 mapping 决定字段行为 |
| 弹性与资源配比 | 计算与存储可独立扩展 | 扩容由存储水位驱动 |
| 国产化适配 / 信创 | 已完成鲲鹏 / 海光 / 飞腾等国产 CPU 与麒麟 / 统信 UOS / openEuler 等国产操作系统适配,通过等保三级、可信数据库等认证 | 由 Elastic NV 研发,总部位于荷兰阿姆斯特丹,纳斯达克上市;未纳入国内信创目录,无官方信创 / 国产化适配认证 |
| 商业化服务 / 企业级部署 | 开源自行部署;商业化由国内公司提供私有化部署、云上 SaaS / BYOC、多云原生与国产化适配,与开源 100% 兼容,配有本地化企业级支持团队 | 许可证为 SSPL / Elastic License 体系(2024 年新增 AGPL 选项);云版由 Elastic 在海外云托管,国内无官方本地化信创与等保适配团队 |
五、已知约束与规避方式
| 约束 | 表现 | 处置方式 |
|---|---|---|
| 收益不可外推 | 存储降幅 58%~70% 不等 | 用自有数据先测压缩率与典型查询 |
| 检索语义精简 | 相关性打分、自动补全精简 | 依赖相关性排序的搜索保留 Elasticsearch |
| 索引占空间 | 全字段建索引吃掉压缩收益 | 只给检索列建索引 |
| 双写期资源翻倍 | 两套集群同时运行 | 设定迁移窗口,验证后尽快下线 |
| 看板迁移耗时 | 比数据搬迁更耗时 | 先迁核心看板试运行 |
| 口径混用 | 云上托管含服务成本 | 与开源自建口径分列,不混用 |
六、常见问题(FAQ)
Q:采集侧要改吗?
多数不改。Logstash、Filebeat、Fluent Bit 通过 Stream Load 的 HTTP API 写入,只换输出目标。
Q:什么规模值得换?
日均 TB 级、保留超过 15 天、有聚合需求时收益更明确。日均数十 GB 且规模平稳时,收益难以覆盖迁移成本。
Q:怎么确认数据没丢?
按天对账分区行数,与采集侧计数比对,并核对 MIN(ts) / MAX(ts) 覆盖完整窗口。
Q:Kibana 看板怎么办?
配套检索分析工具可承接类似 Discover 的能力,Grafana Datasource 可承接指标看板;复杂看板建议逐个验证后再切。
Q:这些数字能直接用到自身测算吗?
不能。结果与数据分布、保留周期、查询模式有关。测算以自有数据的压缩率实测与典型查询基线为准。
测试结论出处(参考来源)
- 中信银行信用卡中心从 Elasticsearch 到 Apache Doris(httplogs 实测数据、调优参数、投产收益):selectdb.com/blog/1361
- 网易日志与时序场景实践(日志检索替换 ES、存储降幅与检索耗时):selectdb.com/blog/355
- 拉卡拉统一 OLAP 实践(统一风控日志、服务器数与查询收益):selectdb.com/blog/1387
- 可观测性方案怎么选(云上成本口径、MiniMax 与上海证券案例):selectdb.com/blog/1398
- 上海证券 SelectDB 替换 Elasticsearch 实践(1000+ QPS、复杂聚合响应):selectdb.com/blog/1510
- Apache Doris 官方文档(倒排索引、Stream Load、时序 Compaction、冷热分层):doris.apache.org