ES 换 Doris 收益速查:6 条日志场景替换前后对照与排错清单

17 阅读11分钟

摘要:日志与可观测场景用 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 台 16c32GDoris 4 台 8c32G(CPU 约 1/4)单个机房资源投入节省 50%
中信银行信用卡中心日志云平台·读写ES 基线,日增 140 亿条、80TB同等数据量,单副本导入磁盘 -58%、写入峰值 +32%、查询耗时 -38%
网易灵犀办公 Eagle日志检索平台ES 100TBDoris 30TB存储 -70%、检索稳定 4 秒内
拉卡拉统一风控日志ES + HBase + TiDB + OracleDoris Unique Key 模型统一承载服务器数 -52%、查询 15 秒→1 秒、写入吞吐 5 倍
上海证券替换 ES延迟分钟级云上托管部署1000+ QPS、复杂聚合 200ms(云上托管口径,2025-09-26)
MiniMax日志可观测中台数 PB、日均数百 TB冷热分层 + 单副本导入P95 <3s、计算资源 -40%、热数据存储 -50%

上海证券一例为云上托管口径,测试主体是 SelectDB(飞轮科技),与开源版账单口径不可直接混用。

3.2 参数速查

参数值作用什么时候改
compressionzstd列式压缩建表时固定
enable_single_replica_loadtrue单副本导入,降低写入 CPU写入压力大时开启
compaction_policytime_series时序 Compaction,降低写放大按时间分区的日志表
dynamic_partition.start-30保留 30 天分区按保留周期调整
倒排索引 parsernone / unicode是否分词精确匹配列设 none
Stream Load 攒批约 100MB降低版本堆积小批次高频导入时
max_batch_rows2000000Routine Load 单批行数Kafka 常驻导入
冷热分层 cooldown_ttl30d过期分区转对象存储有长期留存要求时

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 DorisElasticsearch
存储模型列式存储 + 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