构建统一的OLAP
OLAP,即在线分析处理平台。
保险公司试图构建一个数据仓库,能够承担面向客户、分析师和管理层的数据分析工作负载。主要任务包括:
- 自助保险合同查询:保险客户可以通过合同ID检查其合同详情。它还应支持诸如保险期限、保险类型和理赔金额等筛选条件。
- 多维分析:分析师根据需要基于不同的数据维度开发报告,以便提取见解,促进产品创新和反欺诈工作。
- 仪表盘:创建保险销售趋势的可视化概览,以及不同指标的横向和纵向比较。
组建数据架构
用户从Lambda架构开始,将数据流水线分为批处理环节和流处理环节。对于实时数据流,采用Flink CDC;对于批量导入,结合Sqoop、Python和DataX构建自己的数据集成工具,名为Hisen。
然后,实时数据和离线数据在数据仓库层汇合,该层由五个组件组成。
1.ClickHouse
数据仓库采用扁平表设计,ClickHouse在扁平表读取方面表现出色。但随着业务的发展,ClickHouse面临两个挑战:
- 为了支持跨表连接和点查询,用户需要星型模式,但在ClickHouse中实现起来很困难。
- 保险合同的更改需要实时更新到数据仓库。在ClickHouse中,这是通过重新创建扁平表覆盖旧表来完成的,但速度不够快。
2.MySQL
计算后的数据指标存储在MySQL中,但随着数据规模的增长,MySQL开始出现问题,如执行时间延长和错误。
3.Apache Hive + Presto
Hive是批处理环节的主要执行器。它可以转换、聚合和查询离线数据。Presto是Hive的补充,用于交互式分析。
4.Apache HBase
HBase负责主键查询。它从MySQL和Hive中读取客户状态,包括客户信用、保险期限和保额总和。然而,由于HBase不支持二级索引,它在读取非主键列方面的能力有限。另外,作为NoSQL数据库,HBase不支持SQL语句。
这些组件必须相互协作,以满足所有需求,使得数据仓库的工作量过大。这不容易上手,因为工程师必须接受所有这些组件的培训。此外,架构的复杂性增加了延迟风险。
因此,用户试图寻找一个能更好满足他们需求的工具。首先需要的是实时能力,包括实时写入、实时更新和对数据查询的实时响应。其次,需要更灵活的数据分析能力,以支持面向客户的自助查询,如多维分析、大表的连接查询、主键索引、汇总和钻取。然后,在批处理方面,还希望数据写入具有高吞吐量。
最终选择了Apache Doris。
用Apache Doris替换四个组件
Apache Doris能够进行实时和离线数据分析,支持高吞吐量的交互式分析和高并发的点查询。这就是为什么它可以取代ClickHouse、MySQL、Presto和Apache HBase,并作为整个数据系统的统一查询网关。
改进后的数据流水线是一个更简洁的Lambda架构。
Apache Doris提供了各种数据摄取方法。它在数据写入方面速度快。此外,它还实现了写入合并(Merge-on-Write)以提高并发点查询的性能。
1.降低成本
新架构降低了用户的人力成本。一方面,更简单的数据架构使得维护更加容易;另一方面,开发人员不再需要在数据服务API中连接实时和离线数据。
用户还可以通过使用Doris节省金钱,因为它支持分层存储。它允许用户将大量很少访问的历史数据存储在对象存储中,这样存储数据的成本更低。
2.提高效率
Apache Doris可以达到数万的查询每秒(QPS),并在毫秒内响应数十亿的点查询,因此它可以轻松处理面向客户的查询。将热数据与冷数据分离的分层存储也提高了查询效率。
3.服务可用性
作为存储、计算和数据服务的统一数据仓库,Apache Doris方便了灾难恢复。由于组件较少,不必担心数据丢失或重复。
用户的服务可用性的重要保证是Apache Doris的跨集群复制(CCR)功能。它可以在几分钟甚至几秒钟内将数据从集群同步到集群,并实现两种机制来确保数据可靠性:
- Binlog:该机制可以自动记录数据更改并为每个数据修改操作生成一个日志ID。增量日志ID确保数据更改可追溯和有序。
- 数据持久化:在系统崩溃或紧急情况下,数据将存储在磁盘中。
对Apache Doris的深入了解
Apache Doris可以替代ClickHouse、MySQL、Presto和HBase,因为它在整个数据处理流程中具备全面的能力。
在数据摄取方面,Apache Doris基于对Flink CDC和写入合并的支持,实现低延迟的实时写入。它通过标签机制和事务加载来保证写入的Exactly-Once。
在数据查询方面,Apache Doris支持星型模式和扁平表聚合,因此可以在多表连接和大型单表查询中提供高性能。Apache Doris还提供了各种加速不同查询的方法,如用于全文搜索和范围查询的倒排索引,用于点查询的短路查询计划和预编译语句等。