带你读《Apache Doris 案例集》——06 Apache Doris 助力中国联通万亿日志数据分析提速10倍(2)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容Redis),内存型 2GB
简介: 带你读《Apache Doris 案例集》——06 Apache Doris 助力中国联通万亿日志数据分析提速10倍(2)

更多精彩内容,欢迎观看:

带你读《Apache Doris 案例集》——06 Apache   Doris  助力中国联通万亿日志数据分析提速10倍(1):https://developer.aliyun.com/article/1405720


基于Doris 的实时数据仓库

 image.png  

 

在项目二期的建设中,我们使用 Apache Doris替换了 Hive 成功搭建实时数据仓库,实现数据的实时采集、处理和分析,同时使用Apache  Doris替换ClickHouse  作为 OLAP  引擎。架构工作机制如下所示:

 

ODS   贴源层:主要用于存放未经处理的原始数据,通过 Flume 等实时采集工具,将各个厂商未经处理的原始日志以及告警数据统一汇集到 Kafka  中,同时完全相同的数据也会被存入HDFS中一份,作为原始数据核查依据或进行数据回放。

 

DWD 明细层:该层为事实表,数据通过 Flink算引擎实时对生产数据及字段进行清洗、标准化、回填、脱敏之后写入KafkaKafka  中的数据还会对接到 Doris 中,以支持明细日志数据详情回溯查询、准实时模型分析、实时大屏及报表业务。由于大部分日志数据对于数据重复不是很敏感,因此 DWD 层采用 DorisDuplicateKey模型。

 

DWS汇总层:以明细层 Kafka 数据为基础,通过动态规则引擎进行细粒度的聚合分析,为后续的业务查询和OLAP分析做准备,同时大部分建模分析的结果也集中在DWS层。

 

ADS  应用层:该层主要使用DorisAggregateKey模型和Unique Key模型对以上三层的数据进行自动聚合或者自动更新,以满足前端人员的具体分析需求。


新架构的应用实践 

日增百亿数据,稳定快速导入

 

数据分析平台平均每天有150 亿的业务日志数据新增,面对如此大规模的数据量,我们需要考虑如何将数据快速实时稳定入库。经调研,Doris Flink Connector 组件(主要依赖 Doris Stream  Load)可以实现海量数据快速导入。并且其使用非常简单,只需要导入相关依赖包进行简单的配置即可进行。在应用 Doris Flink Connector 数据写入性能可达到每秒20-30万条,极大地提升了数据导入的速度和效率,同时也不会对正常的数据分析造成干扰。 

 

在采用 Flink 进行高频实时写入 Doris 时,如果未合理调整参数配置,可能导致数据版本堆积。为避免该问题,我们进行了以下调整优化:

 

Flink    优化:为减轻 Doris写入压力,可通过提高FlinkCheckpoint时间来减少版本数量。具体来说,我们可以将Checkpoint 时间从之前的15秒提高为60秒,以减少批次写入频率,降低 Doris 单位时间处理事务数量。这样可以在不影响业务的情况下,缓解写入压力,避免产生大量的数据版本。

 

 

数据预处理:为了减轻 Doris 的写入压力,部分数据我们会先在Flink 中通过主键 ID 进行预聚合,将来自多个表中相同的 ID进行处理并构建大宽表,降低多流数据的写入资源消耗。


Doris   优化:调整DorisBE参数,增加 CPU资源参与Compaction  操作;根据业务设置合理的表分区、分桶和副本数量,避免过多分分片,以降低 Compaction   的开销。同时增大max  tablet  version  num     , 避免版本堆积。

 

通过以上优化措施,每日新增的百亿数据可以平稳导入 Doris 中,整个导入过程中BE 表现稳定,CompactionScore始终保持低位,大批量数据的写入对于前端查询的性能也没有造成任何影响。同时在 DorisUniqueKey模型的加持下,我们可以利用Flink对输入数据进行关联、聚合等处理,再以微批、精准一次性写入 Doris中,实现了数据秒级更新。

 

存储资源合理配置,成本节约50%

 

日志数据具有非常大的数据量和数据增长速度,如果不对存储资源进行合理分配和控制,存储成本将会成为一个巨大的负担。日志数据中也会存在重要性的区分,有一定比例的数据价值密度比较低,如果毫无差别的将这些数据都存储下来,不仅会造成存储浪费,也会增加数据分析的难度。为了有效解决这些问题,我们采用了一系列策略来降低数据存储成本:

 

ZSTD高效压缩算法: 利用Doris的新特性——ZSTD  高效压缩算法进行压缩存储。在建表时指定压缩方法为 ZSTD,  特别是对数据量超过T 级别的数据表,这种压缩方法可以有效地减少数据占用的存储空间,数据压缩比最高可达1:10。即使采用3副本来保证数据的高可靠,数据存储占用的空间仍有非常大幅度的降低。

 

 

冷热数据精细化管理:Doris 中只存储近一年的数据,将更早的数据备份到成本更低的存储介质中。同时使用热数据转冷的功能,在SSD 中仅存储最近7的数据,将7 天之前的数据转存到 HDD 中,以进一步降低存储成本。这样可以根据数据的使用频率,合理分配存储资源,达到性能和成本的平衡。目前Apache Doris 2.0版本已经实现了对冷热数据分层功能的支持,这一功能可以将冷数据下沉到存储成本更加低廉的对象存储中,冷数据在对象存储上的保存方式也从多副本变为单副本,存储成本进一步降至原先的三分之一,同时也减少了因存储附加的计算资源成本和网络开销成本,目前我们正在积极测试中,未来有机会也会与大家分享实践经验。 

 

分区级副本设置:3个月以内的数据设置为高频使用数据,将其分区设置3副本;将3-6个月的数据分区设置为2副本;将6个月之前的数据分区设置为1副本。这样可以根据数据的使用情况,合理分配副本数量,实现存储成本降低的同时也充分利用多副本来提升热数据的查询性能。 

 

借助于 Doris 极高效率的压缩算法、冷热数据分层管理、分区级副本设置等功能, 可对存储资源合理分配,最终实现存储成本节约50%,成功达到性能和成本的平衡。


数据规模分级查询,查询速度提升10+

 

日志中包含了许多对分析及时性要求非常高的数据,例如异常事件、故障信息等,因此为了保障日志数据的查询效率,我们以数据量的级别为基准采用了不同的查询策略: 

 

对于100G以下的数据,可以采用分区表的形式进行查询。在业务初期业务表按照天进行分区,每天执行任务需要手动管理分区为我们带来了非常大的维护成本。后来我们利用Doris 的动态分区功能,针对数据量较大的表可以使用小时作为分区字段,为了避免分区内数据倾 斜,以雪花ID 作为分桶字段,保证数据的均衡。此外为了避免数据积压,我们还开启了动态分区的起始偏移,保留近20天的数据来支撑业务分析。这样可以有效地降低数据积压的风险,同时也能够满足业务的分析需求。 

 

对于100G1T的数据,我们采用物化视图进行查询,物化视图是一种预先计算并存储结果集的方式,可以减少查询所需的计算时间和资源消耗,从而提高查询效率。Doris系统提供了完整的物化视图 DDL 语法,可用于创建、查看和删除等操作,这些语法与 PostgreSQL Oracle语法一致,使用简单、不需重新学习。

 

 

对于上百T 的数据,我们通过 Aggregate 聚合模型表进行查询,使用 Aggregate 模型在数 据写入前进行预聚合,通过以上方式,我们成功将20亿条数据的查询时间进一步缩短至1-2s,有效提高了数据查询的效率。

 

 在一期数据分析平台中,大部分业务场景都是通过 T+1 的方式进行计算。而在基于 Doris   的二 期数据分析平台中,我们实现了对大部分业务准实时(分钟以及小时级)和实时计算场景的支持。同时结合以上优化措施,极大降低了各种维度指标的统计时间,以往需要分钟级别的明细查询,现在可以在毫秒级别迅速响应,极大地改善了用户体验;另外,在 Doris中,我们能够快速对百亿级别的大表进行不同维度的数据分析,只需要几秒即可获得查询结果,大大提高了联通各业务部门数据分析的能力。

 

收益总结


自引入 Apache Doris 以来,我们已经部署了多个集群、数十台机器,支持了中国联通30 多条业务线和数百个实时作业,日增日志数据百亿级别,单个集群的数据规模达到数 PBApacheDoris的成功应用为联通带来了多方面收益,主要包括如下方面: 

 

在数据导入方面,对于联通而言,每天都面临着庞大的日志增量,并且这些数据的实时性和准确性对于业务发展和决策至关重要,而 Doris Flink Connector助我们实现了数据快速且稳定导入,可轻松应对日增百亿数据的导入要求,为后续的数据处理和分析提供了更高效的解决方案。

 

在存储资源分配方面, 由于数据量庞大、存储周期长等原因,日志数据的存储成本一直是运营商面临的难题,通过采用Doris高效的压缩算法、冷热数据精细管理、分区级副本设置等功能,帮助我们降低了数据存储成本,数据存储利用效率和价值得到显著提升。

 

在查询性能方面, 快速获取日志数据查询结果可以帮助运营商及时掌控网络及系统情况,及时发现并解决问题,也有利于及时了解用户需求和行为,优化营销策略和服务方案。Doris在查询性能方面提供了强大的支持,  能够处理百亿级别大表按小时/天级别的明细查询,并支持不同维度聚合查询分析。业务线整体响应时间可在秒级或毫秒级别完成,甚至可以1-2s 内完成对20亿条数据的查询,查询速度较之前提升了10+倍。

 

未来规划 

 

在最新发布的Apache Doris 2.0版本中,Apache Doris 提供了大量新的功能,比如倒排索引功能和冷热数据分层等,对于日志分析场景来说都是具有重要意义的更新。目前我们是以数据存储周期为基准进行副本分配,并按照数据热度分别存储在SSD HDD 中,后续我们将使用冷热 数据分层新功能,将数据从 SSD 或者 HDD 下沉到对象存储中,从而降低数据存储成本,进一步达到服务器磁盘资源节省的目的。此外,我们正在对倒排索引功能进行测试,并计划先在小范围业务场景推广使用,倒排索引对于字符串类型的全文检索和普通数值、日期等类型的等值、范围检索具有更高效的支持,希望通过倒排索可以帮助我们进一步提高日志数据查询的效率和准确度。

 

 除此之外,基于联通的使用场景,我们对自动分桶功能提出一些建议。目前自动分桶计算逻辑是根据最近的分区数据量来动态决定当前分区的分桶数目,这种方式适用于分区数据量呈线性关系的业务表。然而,由于我们的业务表在白天的数据量较多,夜晚数据量较少,因此使用自动分桶会导致白天部分分区具有较少的分桶,而夜晚分区则具有较多的分桶。因此,未来我们期望社区可以增加一种新的分桶规则, 以前一天的数据分区存储情况为参照,来对当天的分区进行自动分 桶,这样可以更加准确的根据业务表特点进行自动分桶。当然我们也将对该功能的优化进行探索,及时与社区交流,将最新的优化代码贡献到社区,共同推动社区的发展进步。

 

最后,非常感谢SelectDB 的同学,在我们在使用Apache Doris 过程中遇到任何问题,他们都能给予了快速的响应与技术支持,未来我们会持续的将在实践过程中取得的相关成果贡献到社

区。希望Apache DorisSelectDB越来越好!

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
存储 消息中间件 Java
Apache Flink 实践问题之原生TM UI日志问题如何解决
Apache Flink 实践问题之原生TM UI日志问题如何解决
40 1
|
29天前
|
SQL 消息中间件 关系型数据库
Apache Doris Flink Connector 24.0.0 版本正式发布
该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。
|
13天前
|
存储 SQL 缓存
快手:从 Clickhouse 到 Apache Doris,实现湖仓分离向湖仓一体架构升级
快手 OLAP 系统为内外多个场景提供数据服务,每天承载近 10 亿的查询请求。原有湖仓分离架构,由离线数据湖和实时数仓组成,面临存储冗余、资源抢占、治理复杂、查询调优难等问题。通过引入 Apache Doris 湖仓一体能力,替换了 Clickhouse ,升级为湖仓一体架构,并结合 Doris 的物化视图改写能力和自动物化服务,实现高性能的数据查询以及灵活的数据治理。
快手:从 Clickhouse 到 Apache Doris,实现湖仓分离向湖仓一体架构升级
|
28天前
|
存储 JSON 物联网
查询性能提升 10 倍、存储空间节省 65%,Apache Doris 半结构化数据分析方案及典型场景
本文我们将聚焦企业最普遍使用的 JSON 数据,分别介绍业界传统方案以及 Apache Doris 半结构化数据存储分析的三种方案,并通过图表直观展示这些方案的优势与不足。同时,结合具体应用场景,分享不同需求场景下的使用方式,帮助用户快速选择最合适的 JSON 数据存储及分析方案。
查询性能提升 10 倍、存储空间节省 65%,Apache Doris 半结构化数据分析方案及典型场景
|
1月前
|
SQL 消息中间件 Java
兼容Trino Connector,扩展Apache Doris数据源接入能力|Lakehouse 使用手册(四)
通过兼容 Connector 插件,Apache Doris 能够支持 Trino/Presto 可对接的所有数据源,而无需改动 Doris 的内核代码。
兼容Trino Connector,扩展Apache Doris数据源接入能力|Lakehouse 使用手册(四)
|
2月前
|
存储 消息中间件 运维
招联金融基于 Apache Doris 数仓升级:单集群 QPS 超 10w,存储成本降低 70%
招联内部已有 40+ 个项目使用 Apache Doris ,拥有超百台集群节点,个别集群峰值 QPS 可达 10w+ 。通过应用 Doris ,招联金融在多场景中均有显著的收益,比如标签关联计算效率相较之前有 6 倍的提升,同等规模数据存储成本节省超 2/3,真正实现了降本提效。
招联金融基于 Apache Doris 数仓升级:单集群 QPS 超 10w,存储成本降低 70%
|
1月前
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
26 3
Golang语言之Prometheus的日志模块使用案例
|
21天前
|
SQL 存储 缓存
Apache Doris 2.1.6 版本正式发布
2.1.6 版本在 Lakehouse、异步物化视图、半结构化数据管理持续升级改进,同时在查询优化器、执行引擎、存储管理、数据导入与导出以及权限管理等方面完成了若干修复
|
1月前
|
存储 大数据 数据挖掘
【数据新纪元】Apache Doris:重塑实时分析性能,解锁大数据处理新速度,引爆数据价值潜能!
【9月更文挑战第5天】Apache Doris以其卓越的性能、灵活的架构和高效的数据处理能力,正在重塑实时分析的性能极限,解锁大数据处理的新速度,引爆数据价值的无限潜能。在未来的发展中,我们有理由相信Apache Doris将继续引领数据处理的潮流,为企业提供更快速、更准确、更智能的数据洞察和决策支持。让我们携手并进,共同探索数据新纪元的无限可能!
87 11
|
2月前
|
关系型数据库 MySQL API
Apache Doris集群部署
Apache Doris集群部署

推荐镜像

更多