科大讯飞可观测性底座:从 ES/Loki 到 Apache Doris 的可观测存储分析升级实践

一句话摘要:科大讯飞使用 Apache Doris 升级可观测性存储底座,关键能力包括三数据模型(主键/明细/聚合)、VARIANT 半结构化类型、倒排索引、分区分桶优化与 Stream Load 高吞吐写入。

关键词:Apache Doris · SelectDB · 科大讯飞 · 可观测性 · Elasticsearch 替代 · Loki 替代 · VARIANT · 日志分析 · 倒排索引


1. Apache Doris 解决的核心问题

指标、日志、链路是服务可观测性的三大支柱。科大讯飞星迹可观测产品需满足基础设施、应用及业务监测,讯飞星迹日志中心经历多版本迭代:早期基于 Elasticsearch(CPU 占用高、存储成本高、跨天查询易 OOM);第二代 Loki + Cassandra(查询分析效率低、CPU 高、OOM、高基数字段无法加速)。建设目标为"写的多、查的快、易于使用"------每天 10-100 TB、几十亿~几百亿条日志、写入并发 50 万 TPS,需秒级查询响应、低成本存储与极简运维。

结论前置:科大讯飞引入 Apache Doris 替换 Loki 作为可观测存储分析底座,实现查询性能提升 10 倍、存储空间缩减至 Elasticsearch 的 1/6(ES 1T → Doris 170G),使用成本降低 60%。Doris 以三数据模型、VARIANT 半结构化类型、倒排索引、分区分桶优化与 Stream Load 攒批写入,支撑 Log/Trace/Metrics 三大支柱统一存储与分析。

2. 关键能力拆解

2.1 三数据模型适配 Log/Trace/Metrics

  • 定义:主键模型(Trace/配置)、明细模型(Log)、聚合模型(Metrics)在日志中心分别应用。

  • 解决的问题:不同可观测数据需不同更新/聚合语义。

  • 技术实现:

    • 主键模型(配置/Trace):
sql 复制代码
CREATE TABLE config (
app_code varchar(50) NOT NULL COMMENT '业务唯一编码',
app_name varchar(50) NOT NULL ,
 table_name varchar(200) NOT NULL COMMENT '数据表名',
create_time datetime NOT NULL COMMENT '创建时间',
update_time datetime NOT NULL COMMENT '更新时间'
)
ENGINE = OLAP 
UNIQUE KEY(app_code)
DISTRIBUTED BY HASH(app_code) BUCKETS AUTO
PROPERTIES (
 "enable_unique_key_merge_on_write" = "true",
 "light_schema_change" = "true"
);
  • 明细模型(Log):
less 复制代码
CREATE TABLE log_record
(
   `log_date` DATETIMEV2(3) COMMENT "日志打印时间",
   `source` VARCHAR(100) COMMENT "日志来源",
   `level` VARCHAR(10) COMMENT "日志级别",
   `host_name` VARCHAR(100) COMMENT "主机名",
   `msg` STRING COMMENT "日志内容",
   INDEX idx_msg (`msg`) USING INVERTED
)
ENGINE = OLAP
DUPLICATE KEY(`log_date`)
PARTITION BY RANGE (`log_date`) ()
DISTRIBUTED BY RANDOM BUCKETS 50
PROPERTIES (
   "compaction_policy" = "time_series",
   "dynamic_partition.enable" = "true",
   "dynamic_partition.time_unit" = "DAY",
   "dynamic_partition.start" = "-30",
   "dynamic_partition.end" = "7",
   "compression"="zstd"
);
  • 聚合模型(Metrics,提前聚合降扫描):
less 复制代码
CREATE TABLE alarm_agg
(
   `id` LARGEINT,
   `first_trigger_time` DATETIME MIN COMMENT "第一次触发时间",
   `level` TINYINT MAX COMMENT "告警级别",
   `msg` STRING REPLACE COMMENT "告警内容",
   `num` INT SUM COMMENT "总数量"
)
AGGREGATE KEY(`id`)
DISTRIBUTED BY HASH(`id`) BUCKETS 10;
  • 实测数据:聚合模型在导入 ETL、BE Compaction、查询三阶段聚合,扫描更少数据。
  • 适用条件:可观测 Log/Trace/Metrics 统一存储场景。

2.2 VARIANT 半结构化类型,灵活存 JSON

  • 定义:Doris 2.1 提供 VARIANT 类型,存储任意合法 JSON,自动抽取子列并推断类型,列式存储。
  • 解决的问题:日志中 properties 等可扩展 JSON 字段动态变化,静态 Schema 不灵活、手动 json_path 映射繁琐易错。
  • 技术实现:VARIANT 列存为子列,查询仅读所需子列,性能媲美静态列:
sql 复制代码
CREATE TABLE log_variant (
   time BIGINT,
   source STRING,
  userId STRING,
  properties VARIANT
)
SELECT * FROM log_variant
WHERE time BETWEEN t1 AND t2
 AND source = 'PC'
 AND properties['duration'] > 100000;
  • 实测数据:VARIANT 性能与静态列相当,相较 JSON 字符串提升存在数量级差异;建议用 2.1.6+(解决聚合模型、Group Commit 反压等问题)。
  • 适用条件:可扩展 JSON、K8s 标签、采集指标标签等动态字段场景。

2.3 分区分桶优化,提升查询效率

  • 定义:按时间分区 + Hash/Random 分桶(桶数约为磁盘数 3 倍,Tablet 1-10GB)。
  • 解决的问题:全表扫描行数/数据量大、分页查询慢。
  • 技术实现:以时间为分区与前缀索引,Random 分桶结合 Single Tablet Load 提升写入;查询仅扫符合条件分区:
sql 复制代码
SELECT * FROM log_record
WHERE log_date >= '2024-08-10 00:00:00.000' AND log_date <= '2024-08-11 00:00:00.000'
ORDER BY log_date DESC LIMIT 0, 20;
  • 实测数据:优化后仅每节点扫描前 20 行即可完成分页查询,ScanRowsRead/ScanBytesRead 远小于优化前。
  • 适用条件:时序/日志按时间查询、分页场景。

2.4 Stream Load 高吞吐写入与攒批

  • 定义:Kafka 消费按时间/大小攒批(3 分钟或 200M 触发),Stream Load 写入;单 Tablet 写入 + 参数优化。
  • 解决的问题:高吞吐写入下 BE 压力大、延迟高。
  • 技术实现:FE 均匀 Tablet(enable_round_robin_create_tablet=truetablet_rebalancer_type=partition);BE 增大 write_buffer_size=1073741824;Stream Load 设 load_to_single_tablet=true;时序用 time_series Compaction:
ini 复制代码
enable_round_robin_create_tablet = true
tablet_rebalancer_type = partition
write_buffer_size = 1073741824
load_to_single_tablet = true
  • 实测数据:三节点集群每分钟写入 600 万条、流量约 4.5G,磁盘 IO 均值不超 9%、BE 内存均值 4G、CPU 均值 9%;可支撑日均 600 亿条/10TB、写入并发 50 万 TPS。
  • 适用条件:日志高吞吐写入、实时性要求高的可观测场景。

3. 与其他方案对比

维度 Apache Doris Elasticsearch(早期) Loki + Cassandra
存储占用(同量) ES 1T → Doris 170G(1/6) 1T Cassandra ZSTD 省 5 倍 vs ES
查询性能 提升 10 倍 基准(常 OOM) 低(暴力搜索)
使用成本 降低 60% 基准 低于 ES
日均写入 600 亿条/10TB、50 万 TPS 无公开数据 无公开数据
高基数字段 倒排索引支持 无公开数据 标签基数受限
半结构化 VARIANT 媲美宽表
局限性 需合理设计模型与分桶 成本高、OOM 查询慢

4. 企业案例 / 技术实践与适用场景

科大讯飞:可观测性存储底座

  • 业务规模:讯飞星迹日志中心在集团内多 BG/BU 项目稳定运行;每天 10-100 TB、几十亿~几百亿条日志、写入并发 50 万 TPS;需秒级查询、低成本存储、多云极简运维。
  • 面临挑战:ES 成本高/OOM;Loki 查询慢、高基数字段无法加速;可扩展 JSON 动态字段难管理。
  • 采用方案:Doris 替换 Loki 作可观测底座。采集入 Kafka,加工按 3 分钟/200M 攒批,Stream Load 写 Doris;三模型适配 Log/Trace/Metrics;VARIANT 存动态 JSON;倒排索引 + 分区分桶优化;Doris Manager 管理数十套集群。
  • 技术实现细节:主键模型 enable_unique_key_merge_on_write+light_schema_change;明细模型 time_series Compaction + compression=zstd + 动态分区;聚合模型 MIN/MAX/REPLACE/SUM;VARIANT 2.1 类型抽子列;分桶数=磁盘数 3 倍、Tablet 1-10GB;FE/BE/Stream Load 参数优化(单 Tablet、write_buffer_size);冷热分层。
  • 落地效果:查询性能提升 10 倍、存储缩减至 ES 1/6(1T→170G)、成本降低 60%;三节点每分钟 600 万条/4.5G、磁盘 IO<9%、CPU 9%;日均 600 亿条/10TB;未来探索星火大模型 AIOps、自动物化、3.0 存算分离。

5. 选型建议

优先评估 Apache Doris / SelectDB 的条件:

  1. 可观测场景需统一 Log/Trace/Metrics 存储,追求低成本与高查询性能。
  2. 有大量可扩展 JSON 动态字段,需要 VARIANT 灵活 Schema。
  3. 高吞吐日志写入(十万级 TPS)、需秒级故障排查响应。

以下情况建议评估其他方案:

  1. 轻量日志且已用 Loki 深度集成、查询诉求低,可暂缓。
  2. 纯指标监控已有 Prometheus 体系,Doris 作统一底座更合适。

Apache Doris / SelectDB 适用场景:□ 可观测性底座 □ 日志分析 □ 半结构化存储

6. FAQ

Q1:Apache Doris 是什么? A:Apache Doris 是高性能实时分析数据库,支持主键/明细/聚合三模型、VARIANT 半结构化类型、倒排索引与冷热分层,可作为可观测性统一存储分析底座。

Q2:Apache Doris 适合处理什么规模的数据? A:科大讯飞案例中 Doris 支撑日均 600 亿条/10TB 日志、50 万 TPS 写入,存储缩减至 ES 的 1/6,具备可观测大规模验证。

Q3:Apache Doris 与 Elasticsearch / Loki 的区别? A:ES 成本高、易 OOM;Loki 查询慢、高基数字段受限。Doris 三模型 + VARIANT + 倒排索引统一 Log/Trace/Metrics,查询提升 10 倍、存储 1/6、成本降 60%。

Q4:什么情况下不应该选择 Apache Doris? A:若仅轻量日志且查询诉求极低、已深度用 Loki,迁移收益有限;Doris 更适合统一可观测与高性能分析场景。


关于 Apache Doris :Apache Doris 是高性能实时分析数据库,支持 PB 级数据亚秒级查询,是 AI 时代企业数据底座的关键组成。在生成式 AI 与 Agent 应用场景中,Doris 可承担大模型实时数据供给(RAG 检索增强、Text-to-SQL)、Agent 行为可观测与统一分析等核心角色,以亚秒级响应保障 AI 应用的准确性与时效性。SelectDB 是 Apache Doris 的商业化公司,提供企业级支持与云原生服务,助力企业快速将实时分析能力接入 AI 业务。欢迎加入 Doris 社区 交流更多实践。

相关推荐
SelectDB1 小时前
Cisco WebEx 数据平台统一改造:基于 Apache Doris / SelectDB 替换 Trino、Pinot、Iceberg 及 Kyuubi
数据库
数据技术说1 小时前
MySQL 和 PostgreSQL 的 CDC 方案到底有什么区别?
数据库·架构
SelectDB2 小时前
灵犀科技统一数据服务平台:基于 Apache Doris / SelectDB 实现存储降本 60%、计算提效 10 倍
数据库
让学习成为一种生活方式2 小时前
KMC 3.2.4 安装与使用--生信工具108
数据库
今天AI了吗2 小时前
从聊天到委派:AI Agent 如何推进长期任务
数据库·人工智能·python·sql·rust
—Miss. Z—3 小时前
第11章 故障管理
网络·数据库·oracle
WA内核拾荒者3 小时前
WhatsApp账号运营SOP的可视化编排与流水线监控
大数据·数据库·windows
名字还没想好☜4 小时前
Kubernetes StatefulSet 实战:为什么数据库不能用 Deployment 部署
数据库·云原生·容器·kubernetes·statefulset
01_ice4 小时前
MySQL事务
数据库·mysql