基于 Flink ClickHouse 打造轻量级点击流实时数仓

Flink 和 ClickHouse 分别是实时计算和(近实时)OLAP 领域的翘楚,也是近些年非常火爆的开源框架,很多大厂都在将两者结合使用来构建各种用途的实时平台,效果很好。关于两者的优点就不再赘述,本文来简单介绍笔者团队在点击流实时数仓方面的一点实践经验。

点击流及其维度建模

所谓点击流(click stream),就是指用户访问网站、App 等 Web 前端时在后端留下的轨迹数据,也是流量分析(traffic analysis)和用户行为分析(user behavior analysis)的基础。点击流数据一般以访问日志和埋点日志的形式存储,其特点是量大、维度丰富。以我们一个中等体量的普通电商平台为例,每天产生约 200GB 左右、数十亿条的原始日志,埋点事件 100+ 个,涉及 50+ 个维度。
按照 Kimball 的维度建模理论,点击流数仓遵循典型的星形模型,简图如下。

点击流数仓分层设计

点击流实时数仓的分层设计仍然可以借鉴传统数仓的方案,以扁平为上策,尽量减少数据传输中途的延迟。简图如下。
  • DIM 层:维度层,MySQL 镜像库,存储所有维度数据。
  • ODS 层:贴源层,原始数据由 Flume 直接进入 Kafka 的对应 topic。
  • DWD 层:明细层,通过 Flink 将 Kafka 中数据进行必要的 ETL 与实时维度 join 操作,形成规范的明细数据,并写回 Kafka 以便下游与其他业务使用。再通过 Flink 将明细数据分别写入 ClickHouse 和 Hive 打成大宽表,前者作为查询与分析的核心,后者作为备份和数据质量保证(对数、补数等)。
  • DWS 层:服务层,部分指标通过 Flink 实时汇总至 Redis,供大屏类业务使用。更多的指标则通过 ClickHouse 物化视图等机制周期性汇总,形成报表与页面热力图。特别地,部分明细数据也在此层开放,方便高级 BI 人员进行漏斗、留存、用户路径等灵活的 ad-hoc 查询,这些也是 ClickHouse 远超过其他 OLAP 引擎的强大之处。

要点与注意事项

Flink 实时维度关联

Flink 框架的异步 I/O 机制为用户在流式作业中访问外部存储提供了很大的便利。针对我们的情况,有以下三点需要注意:
  • 使用异步 MySQL 客户端,如 Vert.x MySQL Client。
  • AsyncFunction 内添加内存缓存(如 Guava Cache、Caffeine 等),并设定合理的缓存驱逐机制,避免频繁请求 MySQL 库。
  • 实时维度关联仅适用于缓慢变化维度,如地理位置信息、商品及分类信息等。快速变化维度(如用户信息)则不太适合打进宽表,我们采用 MySQL 表引擎将快变维度表直接映射到 ClickHouse 中,而 ClickHouse 支持异构查询,也能够支撑规模较小的维表 join 场景。未来则考虑使用 MaterializedMySQL 引擎(当前仍未正式发布)将部分维度表通过 binlog 镜像到 ClickHouse。

Flink-ClickHouse Sink 设计

可以通过 JDBC(flink-connector-jdbc)方式来直接写入 ClickHouse,但灵活性欠佳。好在 clickhouse-jdbc 项目提供了适配 ClickHouse 集群的 BalancedClickhouseDataSource 组件,我们基于它设计了 Flink-ClickHouse Sink,要点有三:
  • 写入本地表,而非分布式表,老生常谈了。
  • 按数据批次大小以及批次间隔两个条件控制写入频率,在 part merge 压力和数据实时性两方面取得平衡。目前我们采用 10000 条的批次大小与 15 秒的间隔,只要满足其一则触发写入。
  • BalancedClickhouseDataSource 通过随机路由保证了各 ClickHouse 实例的负载均衡,但是只是通过周期性 ping 来探活,并屏蔽掉当前不能访问的实例,而没有故障转移——亦即一旦试图写入已经失败的节点,就会丢失数据。为此我们设计了重试机制,重试次数和间隔均可配置,如果当重试机会耗尽后仍然无法成功写入,就将该批次数据转存至配置好的路径下,并报警要求及时检查与回填。
当前我们仅实现了 DataStream API 风格的 Flink-ClickHouse Sink,随着 Flink 作业 SQL 化的大潮,在未来还计划实现 SQL 风格的 ClickHouse Sink,打磨健壮后会适时回馈给社区。另外,除了随机路由,我们也计划加入轮询和 sharding key hash 等更灵活的路由方式。
还有一点就是,ClickHouse 并不支持事务,所以也不必费心考虑 2PC Sink 等保证 exactly once 语义的操作。如果 Flink 到 ClickHouse 的链路出现问题导致作业重启,作业会直接从最新的位点(即 Kafka 的 latest offset)开始消费,丢失的数据再经由 Hive 进行回填即可。

ClickHouse 数据重平衡

ClickHouse 集群扩容之后,数据的重平衡(reshard)是一件麻烦事,因为不存在类似 HDFS Balancer 这种开箱即用的工具。一种比较简单粗暴的思路是修改 ClickHouse 配置文件中的 shard weight,使新加入的 shard 多写入数据,直到所有节点近似平衡之后再调整回来。但是这会造成明显的热点问题,并且仅对直接写入分布式表才有效,并不可取。
因此,我们采用了一种比较曲折的方法:将原表重命名,在所有节点上建立与原表 schema 相同的新表,将实时数据写入新表,同时用 clickhouse-copier 工具将历史数据整体迁移到新表上来,再删除原表。当然在迁移期间,被重平衡的表是无法提供服务的,仍然不那么优雅。如果大佬们有更好的方案,欢迎交流。

lai

来源:https://blog.csdn.net/nazeniwaresakini/article/details/108846835

(0)

相关推荐

  • 生产队的驴永不懈怠 | 尚硅谷Flink实时数仓视频教程

    摘要:这世间青山灼灼星光杳杳,秋雨淅淅晚风慢慢,也抵不过公子眉目间的星辰和大数据视频. 我趁老婆洗澡,看了一眼她手机, 发现她和丈母娘的语音聊天. 老婆说:今天胸口闷得慌, 老婆说:待会儿把他揍一顿出 ...

  • 收藏,百度、美团 ClickHouse、Flink 干货总结!

    学了那么多技术理论,面试的时候还是会卡壳?做大数据开发的同学可能都会有这样的经历:面试的时候总会被问项目实战经验,好的项目经验简直比学历背景还重要. 所以,想要成为出色的大数据开发,光靠技术栈.刷题是 ...

  • 高频数据采集请求如何不影响主业务(7)

    上一篇文章讨论了写缓存的架构解决方案,它虽然可以减少数据库写操作的压力,但也存在不足.比如需要长期高频插入数据时,这个解决方案就无法满足,本篇文章我们就围绕这个问题逐步提出解决方案.在架构方案层层展开 ...

  • 回顾·基于HBase实时数仓探索实践

    本文根据上海久耶大数据研发工程师武基鹏在中国HBase技术社区第四届MeetUp上海站中分享的<基于HBase实时数仓探索实践>编辑整理而成. 今天从六个方面介绍,首先是久耶第一代离线数仓 ...

  • 腾讯看点王展雄:实时数仓与多维实时分析系统搭建

    近几年,数字驱动的口号越喊越响,在这样一个用数据说话的时代,数据在一定程度上决定企业的业务和决策.而从数据驱动的方面考虑,多维实时数据分析系统的重要性也不言而喻.但是当数据量巨大的情况下,企业对数据技 ...

  • 当 TiDB 与 Flink 相结合:高效、易用的实时数仓

    随着互联网飞速发展,企业业务种类会越来越多,业务数据量会越来越大,当发展到一定规模时,传统的数据存储结构逐渐无法满足企业需求,实时数据仓库就变成了一个必要的基础服务.以维表 Join 为例,数据在业务 ...

  • 基于Flink构建实时数仓实践

    导读 随着公司用户增长业务快速发展,陆续孵化出 部落.同镇.C 端会员.游戏等非常多的业务板块.与此同时产品及运营对实时数据需求逐渐增多,帮助他们更快的做出决策,更好的进行产品迭代,实时数仓的建设变得 ...

  • 基于Kafka Flink平台化设计,实时数仓还能这样建

    背景 Flink + Kafka 平台化设计 Kafka 在实时数仓中的应用 问题 & 改进 一.背景介绍 1.流平台通用框架 目前流平台通用的架构一般来说包括消息队列.计算引擎和存储三部分, ...

  • 好未来基于DorisDB的全新实时数仓实践

    好未来(NYSE:TAL)是一家以智慧教育和开放平台为主体,以素质教育和课外辅导为载体,在全球范围内服务公办教育,助力民办教育,探索未来教育新模式的科技教育公司.截至2020年11月底,好未来在102 ...

  • 食行生鲜基于诸葛io打造[运营驾驶舱],数据驱动运营和决策

    本文整理自食行生鲜创始人兼CEO张洪良,作为新零售客户代表在诸葛io场景化解决方案发布会上的发言. 市场现状 食行生鲜创始人兼CEO张洪良,首先分享了生鲜行业的现状: 1.生鲜电商渠道在生鲜销售中占比 ...

  • 科研通讯 | 基于地理交互数据的同位流模式探测方法

    导读 同位模式分析广泛应用于地理事物或对象的空间关联模式发现当中,是一种非常重要的空间分析方法.现有的方法主要用于探测点数据中隐含的同位模式和关联规则.近年来,人流.物流.信息流和技术流等新兴地理流数 ...

  • 梁宝川:2020年,你一定要打造你的工具流

    每日写一篇文章的第2年10天 梁宝川:每一篇文章为你考研添砖加瓦 方法论+工具=成果 这是我之前与大家分享的一个成果模型. 当时与大家分享了一个干货: 如果我们想要得到一个好的成果,那么一定要有一套专 ...