一. 大纲
本篇分享下个人在实时数仓方向的一些使用经验,主要包含了ClickHouse
和 Doris
这两款目前比较流行的实时数仓,文章仅代表个人拙见,有问题欢迎指出,Thanks?(?ω?)?
关于实时数仓,是目前在互联网上比较火的概念,不同于传统的 T+1 的离线数仓(Hadoop 之类),实时数仓更加追求于数据的实时分析能力,也更加符合现阶段各类分析场景对于数据及时性的诉求,例如:ClickHouse 、Doris等都是这一方案的典型代表。
先简单介绍下本篇讨论的两款实时数仓产品:
-
ClickHouse
:由 Yandex(俄罗斯最大的搜索引擎)开源的一个用于实时数据分析的基于列存储的数据库。 -
Doris
:新一代的国产MPP数据库,由 Apache Doris 数据库演进而来,并且进行了商业化支持。
二. 调研过程简述
2.1. 调研诉求
项目上由于 MySQL 中的数据量极速增长后,MySQL 自身无法承担一些实时的olap查询
,所以需要调研一款实时数仓来解决。
我这的业务诉求比较简单,大致有以下几点:
- 实时数仓需要兼容 MySQL 协议与 SQL 语法,开发不需要额外的学习成本,可以快速上手。
-
日志类数据(只会追加)
需要支撑亿级别实时分析,而业务类数据(不断更新)
需要支撑千万级别实时分析并且对于 JOIN 性能要比较好,因为存在很多 JOIN 查询。 - 整体架构要比较简单,因为很多项目硬件资源相对紧张,并且同步延迟保持在30秒内。
- 数据同步过程中并不需要清洗转换,只需要将 MySQL 中的数据镜像复制到 MPP 中即可。
基本架构如下图所示:
2.2. ClickHouse 调研
带着上述的调研诉求,我们首先调研的是 ClickHouse ,因为这是一款以单机性能强悍著称的 OLAP 数据库,而且当时在IT圈里也非常流行。
经过我们的调研测试后,发现 ClickHouse 只适合于日志类流数据的分析
,而日志流数据最大的特点就是数据只会追加而不会变更删除,即所谓的append流
。我们用一台单机的 ClickHouse 就可以支撑上亿的日志聚合分析,效果比较满意,部分查询场景还可以配合物化视图
达到更极速的分析。
针对于另外一种业务类数据的分析场景,因为数据会不断的更新,即所谓的change流
,和日志流数据不太相同,因此我们尝试了用ReplacingMergeTree引擎
的自动合并去重能力,再加上查询时显示指定final关键字
去达到精确查询
的效果,但是性能方面不尽如人意,特别是 JOIN 场景。
对于 ClickHouse 的集群模式,因为需要引用 zookeeper 实现分布式协调,并且还需要创建分布式表,个人觉得比较复杂,而且测试下来,对于更新场景效果还是不好,其他精确查询的方式也不太便捷,因此暂时放弃使用ClickHouse实现业务数据的即时分析,更推荐ClickHous去处理日志流数据
。
兼容性方面,ClickHouse 兼容 MySQL 协议,SQL 语法方面和 MySQL 类似,但是部分基本函数名称变了,而且列名大小写敏感,除这2点比较恶心外,其他基本无问题,后续我们也主要用 ClickHouse 去处理项目上的日志分析,效果还可以。
2.3. Doris 调研
因为 ClickHouse 无法有效的支撑业务类数据的分析场景,所以我们继续调研了 Doris ,主要是看重了 Doris 里存在非常适合实时更新场景的主键模型(Primary key)
,和其比较优越的JOIN性能
。
经过测试对比,Doris 中使用主键模型可以很好的支撑业务数据分析,因为主键模型采用了Delete+Insert
的策略,保证同一个主键下仅存在一条记录,虽然牺牲了一些写入性能,但是极大的提升了查询效率。同时 JOIN 性能也相较于 ClickHouse 提升了很多。
Doris 集群方面不依赖于 ZK ,通过 BE 和 FE 模块了组成了存算分离的架构模型,相比于 ClickHouse 的集群实现简单很多,因此我们可以很便捷的完成 Doris 集群部署及后期的水平扩展。
最后就是 Doris的兼容性,相比于 ClickHouse ,Doris的 MySQL 兼容性更加优秀,基本完全兼容 MySQL 协议与 SQL 语法,开发也可以无缝切换到 Doris进行开发,比较省事。
后期我们主要通过部署 Doris来解决项目上业务数据的实时分析,不过相较于 ClickHouse 的单机部署,Doris则通常是多节点部署才能发挥更好的查询性能,因此 Doris对于硬件的需求会比 ClickHouse 更加高些。
三. 总结
总结一下,如果是需要分析日志流数据,更加推荐 ClickHouse ,因为 ClickHouse 单机强悍,可以支撑亿级别数据量,架构简单,相比于 Doris也更加稳定,相比集群,更推荐单机 ClickHouse 。
如果是分析业务流数据,更加推荐 Doris,因为 Doris对于更新场景性能更加,而且 JOIN 性能更好,而且更加推荐部署 Doris集群,可以充分发挥 Doris的性能。
如果是混合场景,既有日志分析,也存在业务分析,那么也可以用 Doris一套包掉。