本案例为国内某大健康领域头部公司真实案例(因用户保密要求,暂不透露用户相关信息)。希望文章内容对各位读者使用 CloudCanal 构建实时数仓带来一些帮助。
大健康背景下,用户对报表和数据大屏的实时性能要求越来越高。以核酸检测为例,检测结果需要实时统计分析,并在决策大屏中进行可视化展现。数据的及时性直接关系到区域疫情防控的精准布施从而有效防止疫情的扩散,不容半点闪失。在此之上,业务的多样性和复杂性也对公司的研发和运维成本要求也越来越高。
例如疫情防控指挥决策大屏中,数据包括流调溯源数据、物资冷链数据、居住人口数据、重点人群数据、风险排查、隔离管控、核酸检测数据、疫苗接种数据。这些来源数据标准不一,分散的数据引发数据冗余、数据不一致、数据应用困难等问题,导致研发和运维成本的上升,需要通过一个良好的接入层将这些数据做汇总和统一管理。
在此背景下,我司在更高效数据ETL方式以及高性能数据分析工具选型方面不断尝试和创新。通过引入了 CloudCanal 和 StarRocks,在数仓建设、实时数据分析、数据查询加速等业务上实现了效率最大化。
我司旗下拥有多款大健康产品。虽然各款产品的具体业务不同,但是数据流的链路基本一致:数据接入->数据处理与分析->数据应用。
下面以 疫情防控系统 为例简单介绍其中数据流的生命周期:
|--|
针对疫情防控系统,我们最初选择 ClickHouse 作为分析层,通过 DataX + Flink CDC 的模式实现实时+离线数据同步。随着业务的迭代,这套架构已经无法满足我们的需求。
|--|
原有疫情防控的架构总体上分为四块,自底向上分别是:
数据层:源端数据源主要是 MySQL 为主的关系型数据库。
|--|
处理层:采用离线+实时的 lambda 架构。其中离线部分采用 DataX 和 Kettle 进行定时全量,迁移源端维表到分析层的宽表中。实时部分使用 Flink-CDC 获取增量数据,一般是用于加速中间数据和近期的热数据。离线和在线数据分别存储在 ClickHouse 不同表中,提供给业务侧查询使用。
|--|
分析层:分析层会保存计算好的指标数据以及用于加速查询的中间结果数据。
|--|
业务层
接入的监测数据分散在各个数据库实例和数据库中。我们遇到的问题主要是:
|--|
新架构层次划分与原有架构基本相同,我们对处理层与分析层的技术栈选型进行了一些调整。在原有架构中,我们使用DataX+FlinkCDC的方案实现了数据的实时与离线同步传输。在替换CloudCanal后,统一实时离线两套技术栈,减少了运维成本。分析层中,通过使用StarRocks替换ClickHouse,在性能,运维成本,业务扩展上也带来了极大的提升。
针对于分析层的问题与挑战,我们着力于寻找一款高性能,简单易维护的数据库产品来替换已有的ClickHouse架构,同时也希望在业务层上能突破 ClickHouse 单表查询的限制,通过实时多表关联的方式拓展业务层的需求。
目前市面上的 OLAP 数据库产品百花齐放,诸如 Impala、Druid、ClickHouse 及 StarRocks。在经过一些列的对比之后,我们最终敲定选择StarRocks替换原有的ClickHouse作为分析层的数据库引擎。
|--|
StarRocks 是一款极速全场景MPP企业级数据库产品,具备水平在线扩缩容、金融级高可用,兼容 MySQL协议和 MySQL 生态,提供全面向量化引擎与多种数据源联邦查询等重要特性,在全场景 OLAP 业务上提供统一的解决方案,适用于对性能,实时性,并发能力和灵活性有较高要求的各类应用场景。
经过初步的考量,我们认为,StarRocks 兼容 MySQL 协议与标准SQL,相比于 ClickHouse 对于业务开发人员更加友好。同时,强大的多表关联能力可以将原有的大宽表模型转换为星型/雪花模型,增加了建模的灵活性,更好的应对业务需求的迭代。在运维方面,自动化调度机制可以支持在线扩缩容,可以极大的减少在ClickHouse上的运维成本。
在引入 StarRocks 对系统进行升级改造后,极大程度的减少了原本 ClickHouse 中的慢查询。整体查询效率提升2~3倍。下面是生产环境业务中两张核心表。其中以我们一个典型的统计SQL为例,可以看到StarRocks带来了明显的性能提升。
表名 | 行数 |
---|---|
rhr_person_info | 3451483 |
chm_children_should | 6036599 |
ClickHouse侧执行SQL
select count(0) from rhr_person_info a inner join chm_children_should b on a.id=b.person_id where toDate(b.should_start) <= toDate('2022-03-01') and toDate(b.should_end) >= toDate('2022-03-02') and (credentials_number = '%zz%' or en_name like '%zz%') and create_type_code =2 and is_deleted =0 and district_id like '130926105%'
StarRocks侧执行SQL
--starrocks select count(0) from rhr_person_info a inner join chm_children_should b on a.id=b.person_id where date_format( should_start,'%Y-%m-%d') <= ('2022-03-01') and date_format( should_end,'%Y-%m-%d') >= ('2022-03-02') and (credentials_number = '%zz%' or en_name like '%zz%') and create_type_code =2 and is_deleted =0 and district_id like '130926105%'
查询响应时间比较
StarRocks | ClickHouse | |
---|---|---|
平均响应时间 | 368ms | 3340ms |
在体验至极性能的同时,我们在维护性,灵活建模等方面也获得了极佳的体验:
对比 | 数据层 | 处理层 | 分析层 |
---|---|---|---|
原架构 | 4台 | 2台 | 3台 |
新架构 | 2台 | 1台 | 3台 |
原架构在数据层和处理层研发人员工作占比为60%,每一个业务的调整需要与 DBA 一起测试查询 SQL,防止出现慢语句同时业务系统随着需求的增加经常有增加字段的需求,研发人员需要不断调整和发布 Flink CDC 调度。新架构只需要 ETL 工程师负责运维即可,体现了 CloudCanal 低代码和便捷的运维优势。
StarRocks 部署不需要大数据组件的支撑,部署运维都很简单。StarRocks 兼容Mysql生态,业务使用可直接使用Mysql JDBC 进行连接,不用再担心SQL语法差异问题。
目前,我们已经上线了 2 个产品线的 StarRocks 集群,通过 CloudCanal 更好的实现了实时数仓的搭建,已经在公司内部进行推广,后续会有更多的应用落地。感谢 CloudCanal 团队和 StarRocks 团队提供专业的支持服务。
加入CloudCanal粉丝群掌握一手消息和获取更多福利,请添加我们小助手微信:
CloudCanal-免费好用的企业级数据同步工具,欢迎品鉴。
了解更多产品可以查看官方网站: http://www.clougence.com
CloudCanal社区:https://www.askcug.com/