本文主要介绍 BTC.com 团队在实时 OLAP 方面的技术演进过程及生产优化实践,内容如下:
BTC.com 是一家区块链技术方案提供者,我们的业务主要分为四个部分,总结来说就是 ABCD:A 是人工智能机器学习,B 是区块链,C 代表云,D 是数据。这些模块不仅相互独立的,也可以互相结合。近几年人工智能、区块链的加速发展与大数据在背后提供的支持息息相关。
区块链通俗来讲可以理解为一个不可逆的分布式账本,我们的作用是让大家能更好的浏览账本,挖掘账本背后的信息数据。目前比特币的数据量级大概在几十亿到百亿,数据量大概在数十 T,当然我们也有其他的一些业务,如以太坊货币、智能合约分析服务等。
整体而言我们是一家区块链技术方案的提供商,提供挖矿的服务。与金融行业的银行一样,我们也有很多的 OLAP 需求,比如当黑客攻击交易所或供应链进行资产转移或者洗钱时,需要经过链上的操作,我们可以在链上对其进行分析,以及交易上的跟踪,统计数据等,为警方提供协助。
大概 2018 年的时候,竞争对手比较少,我们整体的架构如上。底层是区块链的节点,通过 Parser 不断的解析到 MySQL ,再从 MySQL 抽取到 Hive 或者 Presto,从 Spark 跑各种定时任务分析数据,再通过可视化的查询,得到报表或者数据。架构的问题也是显而易见的:
在技术选型的时候我们需要考虑什么呢?首先是缩容,2020 年行情不太好,大家都在尽力缩减成本,更好的活下去。在成本有限的情况下,我们如何能做更多的东西,必须提高自身的效率,同时也要保证质量。所以我们需要找到一种平衡,在成本效率还有质量这三者之间进行一定的平衡。
俗话说,工具选的好,下班下的早,关于是否引入 Flink,我们想了很久,它和 Spark 相比优势在哪里?
我们实际调研以后,发现 Flink 还是有很多优势,比方说灵活的窗口,精准的语义,低延迟,支持秒级的,实时的数据处理。因为团队本身更熟练 Python ,所以我们当时就选择了 PyFlink ,有专业的开发团队支撑,近几个版本变化比较大,实现了很多功能。在实时 OLAP 方面,数据库我们采用了 ClickHouse 。
为什么要使用 ClickHouse ?首先是快,查询的效率高。字节跳动,腾讯,快手等大公司都在用。同时我们也有 C++方面的技术积累,使用起来比较容易,成本不是太高。
基于以上的技术选型,我们就形成了上图的架构,底层是数据源,包括区块链的节点,通过 Parser 解析到 Kafka,Kafka 负责对接 Flink 和 Spark 任务,然后 Flink 把数据输出到 MySQL 和 ClickHouse,支持报表导出,数据统计,数据同步,OLAP 统计等。
数据治理方面,我们参考了业界的分层,分成了原始层、明细层、汇总层以及应用层。我们还有机器学习的任务,这些都部署在 K8s 平台之上。
我们的架构演进过程如下图,从 2018 年的 Spark 和 Hive ,到后来的 Tableau 可视化,今年接触了 Flink ,下半年开始使用 ClickHouse ,后来 Flink 任务比较多了,我们开发了简易的调度平台,开发者只需要上传任务,就会定时或者实时的跑任务。
在实时 OLAP 上线后,基本满足了业务需求,同时成本也在可控的范围内。
Flink 和 ClickHouse 之间有一些联动,我们自定义了三个工作。
我们也在做一些开源方面的跟进,做一些补丁方面的尝试,把我们业务上,技术上常用的 UDF ,集合在一起。
如果超过 51%的算力,就会达到这样的效果,成为最长的链,这个是累计难度比较高的,此时我们会认为数据导入失败,同时我们会利用回撤的功能,不断将其回滚和重组,直到满足最完整的链。当然我们也会设置一些记录和 CheckPoint ,这里的 CheckPoint 和 Flink 的 CheckPoint 的概念也有所区别。
它是区块链方面的 CheckPoint ,区块链有一个币种叫 bch ,会定义 CheckPoint,当满足一定的长度时,它就无法再进行回滚,避免了攻击者的攻击。我们主要是利用 CheckPoint 记录信息,防止回滚,同时还会按照级别/表记录批量插入的失败或者成功,如果失败则会进行重试,以及报警回滚等操作。
ClickHouse 不支持 Upsert ,主要在 SDK 方面做兼容,之前是直接往 MySQL 写数据,目标是通过 SQL 语句修改对应的 SDK 增加临时小表的 join ,通过 join 临时小表,进行 Upsert 的操作。
举个例子,区块链地址账户余额,就像银行的账户余额,必须非常精确。
Kubernetes 方面的优化。Kubernetes 是一个很完整的平台。
使用 Prometheus 作为监控工具。使用方便,成本较低。
总的来说的话,路漫漫其修远兮,使用 Flink 真不错。
本文转载自:DataFunTalk(ID:dataFunTalk)
原文链接:从 0 到 1,建设实时OLAP
领取专属 10元无门槛券
私享最新 技术干货