当前位置: 首页 > 编程日记 > 正文

ClickHouse & StarRocks 使用经验分享

一. 大纲

本篇分享下个人在实时数仓方向的一些使用经验,主要包含了ClickHouseStarRocks 这两款目前比较流行的实时数仓,文章仅代表个人拙见,有问题欢迎指出,Thanks♪(・ω・)ノ

关于实时数仓,是目前在互联网上比较火的概念,不同于传统的 T+1 的离线数仓(Hadoop 之类),实时数仓更加追求于数据的实时分析能力,也更加符合现阶段各类分析场景对于数据及时性的诉求,例如:ClickHouse 、StarRocks 等都是这一方案的典型代表。

先简单介绍下本篇讨论的两款实时数仓产品:

  • ClickHouse:由 Yandex(俄罗斯最大的搜索引擎)开源的一个用于实时数据分析的基于列存储的数据库。
  • StarRocks:新一代的国产MPP数据库,由 Apache Doris 数据库演进而来,并且进行了商业化支持。
二. 调研过程简述
2.1. 调研诉求

项目上由于 MySQL 中的数据量极速增长后,MySQL 自身无法承担一些实时的olap查询,所以需要调研一款实时数仓来解决。

我这的业务诉求比较简单,大致有以下几点:

  • 实时数仓需要兼容 MySQL 协议与 SQL 语法,开发不需要额外的学习成本,可以快速上手。
  • 日志类数据(只会追加)需要支撑亿级别实时分析,而业务类数据(不断更新)需要支撑千万级别实时分析并且对于 JOIN 性能要比较好,因为存在很多 JOIN 查询。
  • 整体架构要比较简单,因为很多项目硬件资源相对紧张,并且同步延迟保持在30秒内。
  • 数据同步过程中并不需要清洗转换,只需要将 MySQL 中的数据镜像复制到 MPP 中即可。

基本架构如下图所示:

img

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. StarRocks调研

因为 ClickHouse 无法有效的支撑业务类数据的分析场景,所以我们继续调研了 StarRocks ,主要是看重了 StarRocks 里存在非常适合实时更新场景的主键模型(Primary key),和其比较优越的JOIN性能

经过测试对比,StarRocks 中使用主键模型可以很好的支撑业务数据分析,因为主键模型采用了Delete+Insert 的策略,保证同一个主键下仅存在一条记录,虽然牺牲了一些写入性能,但是极大的提升了查询效率。同时 JOIN 性能也相较于 ClickHouse 提升了很多。

StarRocks 集群方面不依赖于 ZK ,通过 BE 和 FE 模块了组成了存算分离的架构模型,相比于 ClickHouse 的集群实现简单很多,因此我们可以很便捷的完成 StarRocks 集群部署及后期的水平扩展。

img

最后就是 StarRocks 的兼容性,相比于 ClickHouse ,StarRocks 的 MySQL 兼容性更加优秀,基本完全兼容 MySQL 协议与 SQL 语法,开发也可以无缝切换到 StarRocks 进行开发,比较省事。

后期我们主要通过部署 StarRocks 来解决项目上业务数据的实时分析,不过相较于 ClickHouse 的单机部署,StarRocks 则通常是多节点部署才能发挥更好的查询性能,因此 StarRocks 对于硬件的需求会比 ClickHouse 更加高些。

三. 实时同步

下面我们来谈下如何实现 MySQL to MPP 的实时同步。

3.1. ClickHouse同步

MySQL to ClickHouse 的同步我们使用了 GitHub 上开源的一款 CDC 产品,名字叫做Bifrost,流程图如下所示,Bifrost 通过解析 MySQL Binlog 然后拼接成 insert 语句,最后批量写入 ClickHouse 中完成实时同步。

img

因为 Bifrost 会自动将 CDC 数据拼接成 SQL ,攒成一批数据后批量写入 ClickHouse ,所以并不需要 Kafka 等消息队列做缓冲,因此架构上非常简单。

因为同步走的是 SQL 语句,所以 MySQL 端加列等常见 DDL 也可以同步到 ClickHouse 中,同步效率上可以支撑每秒上千条数据,延迟在10秒之内,符合我们之前的诉求。

3.2. StarRocks 同步

MySQL to StarRocks 是我们基于 Bifrost 做了一些改动后实现,还是利用 Bifrost 自身的 CDC 功能,先将增量数据写入 Kafka 中,然后在 StarRocks 端通过自身的Routine Load导入功能自主消费 kafka 数据实现同步。另外额外开发了一个 Econvert 的Go程序,用于批量生成 MySQL to StarRocks 的全量同步脚本,原理是走的 StarRocks 提供的 MySQL 外表同步数据。

img

相较于 ClickHouse 的同步,StarRocks 的同步稍微复杂点,因为 Bifrost 本身不支持直接同步到 StarRocks 中,所以只能先将数据放于 Kafka 中(Bifrost 支持输出到 kafka 中,但是要注意数据格式),再供 StarRocks 消费。

因为 StarRocks 中不支持识别 DDL 的 kafka 数据,所以无法实现自动同步 DDL ,针对 MySQL 中的加列操作需要手动在 StarRocks 修改,同步效率上会比走 SQL 同步的 ClickHouse 更高,延迟也基本可以保持在10秒内,符合我们之前的诉求。

四. 总结

总结一下,如果是需要分析日志流数据,更加推荐 ClickHouse ,因为 ClickHouse 单机强悍,可以支撑亿级别数据量,架构简单,相比于 StarRocks 也更加稳定,相比集群,更推荐单机 ClickHouse 。

如果是分析业务流数据,更加推荐 StarRocks ,因为 StarRocks 对于更新场景性能更加,而且 JOIN 性能更好,而且更加推荐部署 StarRocks 集群,可以充分发挥 StarRocks 的性能。

如果是混合场景,既有日志分析,也存在业务分析,那么也可以用 StarRocks 一套包掉。

img

相关文章:

Springboot整合HBase——大数据技术之HBase2.x

Apache HBase 是以hdfs为数据存储的,一种分布式、可扩展的noSql数据库。是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase使用与BigTable(BigTable是一个稀疏的、分布式的、持久化的多维排序map)非常相似的数据模型。用户将数据行存储在带标签的表中。数据行具有可排序的键和任意数量的列。该表存储稀疏,因此如果用户喜欢,同一表中的行可以具有疯狂变化的列。

终于有人把Web 3.0和元宇宙讲明白了

分散的数据网络使个人数据(例如个人的健康数据、农民的作物数据或汽车的位置和性能数据)出售或交换成为可能,与此同时,不会失去对数据的所有权控制、放弃数据隐私或依赖第三方平台来管理数据。Web 3.0的目标是在创作者经济中取得更好的平衡。互联网第二次迭代(Web 2.0)的缺陷,加上公有区块链技术的诞生,帮助我们朝着更加去中心化的Web 3.0 迈进,元宇宙和更广泛的去中心化网络都是关于现实世界和虚拟世界的融合。此时的网络中不再是静态内容,而是动态的内容,用户现在可以与发布在网络上的内容进行交互。

万字详解数据仓库、数据湖、数据中台和湖仓一体

数字化转型浪潮卷起各种新老概念满天飞,数据湖、数据仓库、数据中台轮番在朋友圈刷屏,有人说“数据中台算个啥,数据湖才是趋势”,有人说“再见了数据湖、数据仓库,数据中台已成气候”……企业还没推开数字化大门,先被各种概念绊了一脚。那么它们 3 者究竟有啥区别?别急,先跟大家分享两个有趣的比喻。1、图书馆VS地摊如果把数据仓库比喻成“图书馆”,那么数据湖就是“地摊”。去图书馆借书(数据),书籍质量有保障,但你得等,等什么?等管理员先查到这本书属于哪个类目、在哪个架子上,你才能精准拿到自己想要的书;

什么是数据中台?

说完了数据中台诞生的历史背景,现在,我们应该对数据中台有了一定的了解,那我们现在给数据中台下个定义。自2016年,数据中台被提出以来,不同的人对数据中台有不同的理解,就像一千个读者心中有一千个哈姆雷特,因此也有许多不同的定义,以下是我从一些文章、书籍中搜集到的关于数据中台的定义:数据中台是DT时代的大背景下,为实现数据快(快速)、准(准确)、省(低成本)赋能业务发展的目标,将企业的数据统一整合起来,基于Onedata方法论借助大数据平台完成数据的统一加工处理,对外提供数据服务的一套机制。

Git 的基本概念、使用方式及常用命令

Git的基本概念、使用方式及常用命令

一键式Excel分词统计工具:如何轻松打包Python脚本为EXE

最近,表姐遇到了一个挑战:需要从Excel文件中统计出经过分词处理的重复字段,但由于数据隐私问题,这些Excel文件不能外传。这种情况下,直接使用Excel内置功能好像是行不通的,需要借助Python脚本来实现。为了解决这个问题,我写了一个简单的数据分析和自动化办公脚本,以方便使用。想象一下,即使电脑上没有安装Python,也能通过一个简单的EXE文件轻松完成工作,这是多么方便!因此,我决定不仅要写出这个脚本,还要学会如何将其打包成一个独立的EXE文件。这样,无需Python环境的电脑也能直接运行它

【msvcr120.dll】修复电脑出现msvcr120.dll找不到的详细方法

当我们在使用某些程序或游戏时,需要调用这个动态链接库文件中的函数或资源,如果这个文件丢失或损坏,就会导致程序无法正常运行,从而出现“msvcr120.dll丢失”的错误提示。了解了msvcr120.dll丢失的原因后,我们再来看一下msvcr120.dll的作用。我们可以下载一个dll修复工具,使用dll修复工具进行修复操作非常简单(亲测可以修复),它可以自动检测电脑缺失或者损坏的dll文件,如果msvcr120.dll缺失,dll修复工具检测到以后,便会自动安装msvcr120.dll文件。

怎么选择数据安全交换系统,能够防止内部员工泄露数据?

数据泄露可能给企业带来诸多风险:财产损失、身份盗窃、骚扰和诈骗、经济利益受损、客户信任度下降、法律风险和责任等,《2021年度数据泄漏态势分析报告》中显示,在数据泄露的主体中,内部人员导致的数据泄漏事件占比接近60%。飞驰云联文件安全交换系统,可以满足企业多场景下的文件交换需求,帮助企业终结多工具、 多系统并行使用的局面,减少因文件交换行为分散带来的数据管理不集中、难以管控的问题, 帮助企业内部构建统一、安全的企业数据流转通道。对于不能下载保存的数据,使用截屏、录屏的方式窃取并外泄数据;

弹性搜索引擎Elasticsearch:本地部署与远程访问指南

本文主要讲解如何使用Elasticsearch分布式搜索分析引擎本地部署与远程访问。

Hive(总)看完这篇,别说你不会Hive!

Hive:由Facebook开源用于解决海量结构化日志的数据统计。Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。本质是:将HQL转化成MapReduce程序1)Hive处理的数据存储在HDFS2)Hive分析数据底层的实现是MapReduce3)执行程序运行在Yarn上创建一个数据库,数据库在HDFS上的默认存储路径是/opt/hive/warehouse/*.db避免要创建的数据库已经存在错误,增加if not exists判断。

什么是HBase?终于有人讲明白了

在 HBase 表中,一条数据拥有一个全局唯一的键(RowKey)和任意数量的列(Column),一列或多列组成一个列族(Column Family),同一个列族中列的数据在物理上都存储在同一个 HFile 中,这样基于列存储的数据结构有利于数据缓存和查询。HBase Client 为用户提供了访问 HBase 的接口,可以通过元数据表来定位到目标数据的 RegionServer,另外 HBase Client 还维护了对应的 cache 来加速 Hbase 的访问,比如缓存元数据的信息。

数据仓库系列:StarRocks 入门培训教程

StarRocks 是一款MPP DB, 对标ClickHouse、Vertica、Teradata、Greenplum,在查询性能上远超当代最快的开源数据库 clickhouse,目前已经被一众互联网企业在生产环境中采用。提供千亿级大数据的在线多维分析和分布式存储。新一代极速全场景 MPP (Massively Parallel Processing) 数据库是forkdoris后独立运营的商业化版本StarRocks。

大数据Hadoop、HDFS、Hive、HBASE、Spark、Flume、Kafka、Storm、SparkStreaming这些概念你是否能理清?

hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hadoop是大数据开发的重要框架,是一个由Apache基金会所开发的分布式系统基础架构,其核心是HDFS和MapReduce,HDFS为海量的数据提供了存储,MapReduce为海量的数据提供了计算,在Hadoop2.x时 代,增加 了Yarn,Yarn只负责资 源 的 调 度。当计算模型比较适合流式时,storm的流式处理,省去了批处理的收集数据的时间;

HDFS对比HBase、Hive对比Hbase

Hive和Hbase是两种基于Hadoop的不同技术Hive是一种类SQL的引擎,并且运行MapReduce任务Hbase是一种在Hadoop之上的NoSQL的Key/value数据库这两种工具是可以同时使用的。就像用Google来搜索,用FaceBook进行社交一样,Hive可以用来进行统计查询,HBase可以用来进行实时查询,数据也 可以从Hive写到HBase,或者从HBase写回Hive。

ClickHouse 与mysql等关系型数据库对比

先用一张图帮助理解两者的本质上的区。

牢牢把握“心价比”,徕芬的业绩爆发是一种必然?

业绩突破背后也有消费复苏的激励作用,但具体到电吹风市场,竞争态势在持续加剧,且有戴森这样的国外品牌盘踞于此。徕芬究竟是如何越走越稳的?

CopyTranslator11安装包下载及安装教程

2.打开解压得到的文件夹,鼠标右击【copytranslator-setup-11.0.0.exe】,选择以管理员身份运行。1.鼠标右击下载的压缩包选择【解压到copytranslator 11.0】文件夹。4.勾选【为使用这台电脑的任何人安装】,点击【下一步】5.选择安装位置,点击【安装】 建议与我的路径保持一致。6.软件安装中,很快完成。

java中如何使用elasticsearch—RestClient操作文档(CRUD)

去数据库查询酒店数据,导入到hotel索引库,实现酒店数据的CRUD基本步骤如下。新建一个测试类,实现文档相关操作,并且完成JavaRestClient的初始化。方式一(全量更新):再次写入id一样的文档,就会删除旧文档,添加新文档。根据id查询到的文档数据是json,需要反序列化为java对象。(2)根据id查询数据库数据,并转换。方式二(局部更新):只更新部分字段。(1)创建文档对应实体。修改文档数据有两种方式。

获得JD商品评论 API 如何实现实时数据获取

随着互联网的快速发展,电商平台如雨后春笋般涌现,其中京东(JD)作为中国最大的自营式电商平台之一,拥有庞大的用户群体和丰富的商品资源。为了更好地了解用户对商品的反馈,京东开放了商品评论的API接口,允许开发者实时获取商品评论数据。本文将介绍如何通过JD商品评论API实现实时数据获取,并给出相应的代码示例。JD商品评论API提供了一系列的接口,允许开发者根据需要获取不同维度的评论数据。通过该API,开发者可以获取到商品的详细评论信息、评论的统计数据以及用户的评论行为数据等。

基于神经网络——鸢尾花识别(Iris)

鸢尾花识别是学习AI入门的案例,这里和大家分享下使用Tensorflow2框架,编写程序,获取鸢尾花数据,搭建神经网络,最后训练和识别鸢尾花。

深度学习知识点全面总结

深度学习定义:一般是指通过训练多层网络结构对未知数据进行分类或回归深度学习分类:有监督学习方法——深度前馈网络、卷积神经网络、循环神经网络等;​ 无监督学习方法——深度信念网、深度玻尔兹曼机,深度自编码器等。深度神经网络的基本思想是通过构建多层网络,对目标进行多层表示,以期通过多层的高层次特征来表示数据的抽象语义信息,获得更好的特征鲁棒性。神经网络的计算主要有两种:前向传播(foward propagation, FP)作用于每一层的输入,通过逐层计算得到输出结果;

光伏发电模式中,分布式和集中式哪种更受欢迎?

5.可实现远距离输送,集中式光伏电站发出的电经高压并网,将电一层层的输送到更高的电压等级,如将高压电输送到华东等地区,以实现西电东输。分布式光伏发电:一般建在楼顶、屋顶、厂房等地方,较多的是基于建筑物表面,就近解决用户的用电问题,通过并网实现供电差额的补偿与外送。1.光伏电源处于用户侧,自发自用,就近发电,就近用电,发电供给当地负荷,视作负载,可以减少对电网供电的依赖,减少线路损耗。4.分布式光伏一般就近并网,线路的损耗很低或者可以说没有,可非常方便的补充当地的电量,供当地及附近的用电用户使用。

深度学习与神经网络

神经网络是一种模拟人脑神经元行为的计算模型,神经网络由大量的神经元(在计算领域中常被称为“节点”或“单元”)组成,并且这些神经元被分为不同的层,分别为输入层、隐藏层和输出层。每一个神经元都与前一层的所有神经元相连接,连接的强度(或权重)代表了该连接的重要性。神经元接收前一层神经元的信息(这些信息经过权重加权),然后通过激活函数(如Sigmoid、ReLU等)处理,将结果传递到下一层。输入层接收原始数据,隐藏层负责处理这些数据,而输出层则将处理后的结果输出。

一篇文章讲清楚!数据库和数据仓库到底有什么区别和联系?

数据库的数据来源来自各种业务系统软件程序的产生的数据,或者是由和这些业务系统软件交互的用户产生的数据,而数据仓库的数据来源则直接是这些业务系统的一个或者多个数据库或者文件,比如 SQL Server、Oracle、MySQL、Excel、文本文件等。也可以简单理解为很多个业务系统的数据库往数据仓库输送数据,是各个数据库的集合体,一个更大的数据库,数据仓库的建立是要打通这些基础数据库的数据的。所以,业务系统的数据库更多的是增删改操作,而数据仓库更多的是查询操作,这就决定了建模方式会有很大的差异。

一文读懂数据仓库、数据湖、湖仓一体

一个数据湖可以存储结构化数据(如关系型数据库中的表),半结构化数据(如CSV、日志、XML、JSON),非结构化数据(如电子邮件、文档、PDF)和二进制数据(如图形、音频、视频)。这套架构,以数据湖为中心,把数据湖作为中央存储库,再围绕数据湖建立专用“数据服务环”,环上的服务包括了数仓、机器学习、大数据处理、日志分析,甚至RDS和NOSQL服务等等。从数据含金量来比,数据仓库里的数据价值密度更高一些,数据的抽取和Schema的设计,都有非常强的针对性,便于业务分析师迅速获取洞察结果,用与决策支持。

绝地求生电脑版的最低配置要求?

更好的方式是通过官方的渠道购买游戏账号,并遵守游戏的规则和使用协议,以保证自己的游戏体验和账号安全性。但请注意,游戏的配置要求可能随着游戏的更新而有所改变,建议您在购买或升级电脑时,参考官方的配置要求以获得最佳游戏体验。如果您的电脑配备了更高性能的处理器,游戏的运行体验将更为流畅。绝地求生是一款较为复杂的游戏,需要较大的内存来加载游戏资源并确保游戏的流畅运行。所以在安装游戏之前,确保您的电脑有足够的存储空间。这些推荐配置可以使您在绝地求生中获得更高的帧率和更好的画面表现,提供更加顺畅和逼真的游戏体验。

什么是 ClickHouse(实时数据分析数据库)

1、ClickHouse是俄罗斯搜索巨头 Yandex 公司早 2016年 开源的一个极具 " 战斗力 " 的实时数据分析数据库,开发语言为C++2、是一个用于联机分析OLAP:Online Analytical Processing) 的列式数据库管理系统(DBMS:Database Management System),简称CK3、工作速度比传统方法快100-1000倍,ClickHouse 的性能超过了目前市场上可比的面向列的DBMS。每秒钟每台服务器每秒处理数亿至十亿多行和数十千兆字节的数据。

数据仓库介绍

​ 1、什么是数据仓库?​ 存储数据的仓库, 主要是用于存储过去既定发生的历史数据, 对这些数据进行数据分析的操作, 从而对未来提供决策支持​ 2、数据仓库最大的特点:​ 既不生产数据, 也不消耗数据, 数据来源于各个数据源​ 3、数据仓库的四大特征:​ 1) 面向于主题的: 面向于分析, 分析的内容是什么 什么就是我们的主题​ 2) 集成性: 数据是来源于各个数据源, 将各个数据源数据汇总在一起。

算法模板之栈图文详解

本文主要讲解栈的定义、用数组模拟栈的相关操作以及相关题目介绍,更多精彩内容等你来浏览。

算法模板之双链表图文详解

本文主要讲解双链表模板,文中带有超详细的图文讲解,希望对你的算法学习有一定的帮助。