今天是一篇架构分享内容。

1.概述

以Flink为主的计算引擎配合OLAP查询分析引擎组合进而构建实时数仓,其技术方案的选择是我们在技术选型过程中最常见的问题之一。也是很多公司和业务支持过程中会实实在在遇到的问题。

很多人一提起实时数仓,就直接大谈特谈Hudi,Flink的流批一体等,但实际上,实时数仓包括任何架构体系的构建如果我们抛开成本和稳定性谈技术,那都是有耍流氓的嫌疑

本文主要给大家进行实时数仓构建的技术选型提供一些经验与思考,面试中如果被问及,也可以谈谈。

2.实时数仓的现状

目前大多数公司的实时数仓业务完全基于Flink计算引擎来搭建实时数据链路,尤其是大多数具有中大流量,或者业务背景较为复杂以及对数据要求强时效性的场景中,无论是做数据关联,还是做业务指标分析,都具有明显的优势,Flink在这些场景中不可或缺。

但是在一些场景中,实时数仓也存在很多问题:

2.1复杂的多表关联分析

在Flink中实现较为完美的多源关联或者说多维度关联比较困难,在多源或者说大规模数据情况下做实时任务,要考虑的问题很多:比如大家经常遇到的join key热点问题,TTL问题,维表本身也会遇到查询的瓶颈,所以又会带来缓存解决方案以及限流问题等。

2.2指标口径的频繁变更

相信大家都遇到过类似的问题,不管是在离线场景还是在实时场景,都会面临频繁的指标口径变更。而在Flink中直接生产多个指标,那么这个任务会变得尤为敏感。每一次的口径变更都会让你痛不欲生。例如状态不兼容的问题,数据需要回溯,主备任务的测试切换问题等等,这个时候可能会想,我为什么要用Flink做实时开发。

2.3小规模非核心场景

Flink本身是需要通过代码开发平台来实现数据处理,这样其整个开发流程就会变得比较重。而在Flink侧做一些小规模非核心场景的任务,开发,测试,预上线,上线。开发耗时长,计算成本高。整个投入产出比很低。而且后期维护也需要耗费大量人力,且运维要求高,需要Flink代码能力。

3.Flink+OLAP查询分析优劣势

所以如果公司的业务场景是完全基于Flink为主+OLAP查询分析为辅助的场景,这种架构在数据处理和分析领域具有显著的优势,但同时也存在一些劣势。

3.1优势:

  • 实时处理能力:Flink作为一个流处理框架,具有强大的实时数据处理能力。它能够实时摄入数据流,并进行近实时的计算和分析,满足对数据时效性要求较高的场景。

  • 低延迟:Flink能够保证数据的低延迟处理,快速响应业务需求,这对于需要快速决策的场景非常重要。

  • 灵活的窗口机制:Flink支持各种窗口机制,可以根据业务需求灵活定义时间窗口,实现对历史数据的聚合和分析。

  • 批流统一:Flink支持批处理和流处理的统一,可以方便地处理批量数据和实时数据,提高数据处理效率。

  • OLAP查询辅助:结合OLAP查询,Flink可以处理复杂的数据分析需求。OLAP查询具有强大的多维分析能力和快速的数据查询速度,能够为决策提供有力支持。

  • 容错性:Flink提供了精确一次的处理语义,保证了数据处理的可靠性。即使在系统故障的情况下,也能够保证数据的一致性。

3.2劣势:

  • 复杂性:Flink作为一个通用的流处理框架,其使用和维护具有一定的复杂性。需要具备一定的编程和数据处理解能力才能有效地使用Flink。

  • 硬件资源要求较高:为了支持实时数据处理和复杂分析,需要较高的硬件资源,包括计算资源、存储资源和网络资源等。这会增加系统的建设和维护成本。

  • 数据一致性挑战:在实时数据处理场景中,如何保证数据的一致性是一个挑战。虽然Flink提供了精确一次的处理语义,但在某些复杂场景下,仍然需要额外的机制来保证数据的一致性。

  • 生态系统不够完善:虽然Flink是一个成熟的流处理框架,但其生态系统相比一些其他大数据处理框架可能还不够完善。可能需要依赖其他工具和组件来完善功能。

  • 对历史数据支持不足:相比传统的OLAP系统,Flink在处理历史数据方面可能存在不足。虽然可以通过存储历史数据来解决这个问题,但会增加系统的复杂性和成本。

综上所述,Flink为主+OLAP查询为辅助的场景具有实时处理能力、低延迟、灵活的窗口机制等优势,但也存在复杂性、硬件资源要求较高、数据一致性挑战等劣势。

4.解决思路构想

在上面的一系列问题中,我们提出的解决方案必然是要避免其缺点,发扬其优点。可以换个思路,我们将计算和存储完全下移到OLAP引擎侧,利用Clickhouse/Doris等数据库的能力,降低数仓链路的开发和维护成本。

事实上,目前各大公司都有或多或少这方面的尝试与应用。

我们以Clickhouse作为核心存储和计算平台,主要是面向近实时的场景。

那么基于这个平台,我们需要做哪些功能来完善它呢?

4.1.开发和测试平台

需要实现一个可以写Clickhouse Sql任务的平台,能够提供从表到表的数据转化链路。包括但不限于提供接入数据,开发SQL,测试任务,提供查询,导出数据的功能。

4.2.数据建模工具

基于Clickhouse Sql构建一个表元数据管理,数据仓库管理,集市管理,以及任务管理的功能。

4.3.数据质量

需要提供数据质量监测能力

4.4.数据治理

提供完整的血缘上报,进行全链路追踪。

表的热度分析,慢SQL的监测,结合表热度进行存储分层处理,以及权限和成本问题等。

5.方案总结

基于上面解决思路,可以想象,我们的解决方案已经很清晰了,主要有两大模块。

1.一个实时性支持良好的数据传输通道

2.一个OLAP分析引擎。

例如

可以开发Flink生成自动化模板化的接入数据任务,包括但不限于客户端日志,服务端日志,数据库日志等。解析完成写入kafka.

通过Clickhouse物化视图的方案读取kafka数据,进而构建出近实时的数仓

以上两个步骤我们完全可以灵活选择,例如第一步我可以通过模板化的FlinkSql来实现。或者使用FlinkCDC功能等。

而Clickhouse还可以用市面上相近的数据库来替代,如Doris或者StarRocks等。

以上,为本次分享内容。

感谢阅读。

按例,欢迎点击此处关注我的个人公众号,交流更多知识。

实时数仓构建:Flink+OLAP查询的一些实践与思考的更多相关文章

  1. 更强大的实时数仓构建能力!分析型数据库PostgreSQL 6.0新特性解读

    阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务 ...

  2. 基于Flink构建全场景实时数仓

    目录: 一. 实时计算初期 二. 实时数仓建设 三. Lambda架构的实时数仓 四. Kappa架构的实时数仓 五. 流批结合的实时数仓 实时计算初期 虽然实时计算在最近几年才火起来,但是在早期也有 ...

  3. 美团点评基于 Flink 的实时数仓建设实践

    https://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651749037&idx=1&sn=4a448647b3dae5 ...

  4. 基于 ByteHouse 构建实时数仓实践

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 随着数据的应用场景越来越丰富,企业对数据价值反馈到业务中的时效性要求也越来越高,很早就有人提出过一个概念: 数据的 ...

  5. 基于 Flink 的实时数仓生产实践

    数据仓库的建设是“数据智能”必不可少的一环,也是大规模数据应用中必然面临的挑战.在智能商业中,数据的结果代表了用户反馈.获取数据的及时性尤为重要.快速获取数据反馈能够帮助公司更快地做出决策,更好地进行 ...

  6. flink实时数仓从入门到实战

    第一章.flink实时数仓入门 一.依赖 <!--Licensed to the Apache Software Foundation (ASF) under oneor more contri ...

  7. (转)用Flink取代Spark Streaming!知乎实时数仓架构演进

    转:https://mp.weixin.qq.com/s/e8lsGyl8oVtfg6HhXyIe4A AI 前线导读:“数据智能” (Data Intelligence) 有一个必须且基础的环节,就 ...

  8. 基于 Kafka 的实时数仓在搜索的实践应用

    一.概述 Apache Kafka 发展至今,已经是一个很成熟的消息队列组件了,也是大数据生态圈中不可或缺的一员.Apache Kafka 社区非常的活跃,通过社区成员不断的贡献代码和迭代项目,使得 ...

  9. 大数据之Hudi + Kylin的准实时数仓实现

    问题导读:1.数据库.数据仓库如何理解?2.数据湖有什么用途?解决什么问题?3.数据仓库的加载链路如何实现?4.Hudi新一代数据湖项目有什么优势? 在近期的 Apache Kylin × Apach ...

  10. 实时数仓(二):DWD层-数据处理

    目录 实时数仓(二):DWD层-数据处理 1.数据源 2.用户行为日志 2.1开发环境搭建 1)包结构 2)pom.xml 3)MykafkaUtil.java 4)log4j.properties ...

随机推荐

  1. Educational Codeforces Round 65 (Rated for Div. 2)C. News Distribution(模拟,计算的时候去重)

    这道题目明显和出现4次的数和出现2次的数的个数有关系,只需要在每次更新之后维护这两个信息即可,我们在算出现2次的数的个数时其实会把出现4次的数的个数会把出现2次的数的个数+2,在判断时需要考虑这一点. ...

  2. JAVA 多线程---面经

    线程与进程 提到进程那就要说程序,程序有指令和数据,程序从磁盘加载到内存,cpu获得指令进行执行,其中还会用到各种资源如网络资源,磁盘等.一个程序从磁盘进入内存,就是进程实例的创建. 一个程序可以有多 ...

  3. 发现这个ip有bt下载,所以改路由,让其访问到一个不存在的ip上 route add

    管理员权限cmd 发现这个ip有bt下载,所以改路由,让其访问到一个不存在的ip上 route add -p 195.154.181.225 mask 255.255.255.255 127.0.0. ...

  4. java学习 javaz-001 Helloworld 第一个demo

    java学习 javaz-001 Helloworld 第一个demo 目录 学习目标 前期准备 java sdk 1.8环境 编辑器IDE的选择 代码开发 目录结构 创建第一个java文件 创建第2 ...

  5. open cv java 可以 对图片进行分析,得到数据。考试答题卡 2B铅笔涂黑嘎达 识别

    open cv java 可以 对图片进行分析,得到数据.考试答题卡 2B铅笔涂黑嘎达 识别

  6. Android自定义View使用系统自有属性

    原文链接: Android自定义View使用系统自有属性 - Stars-One的杂货小窝 本篇默认各位有自定义View的相关知识,本篇只作为一个小知识点补充 有这样一种情况,比如说我们的一个自定义V ...

  7. day10-Spring Cloud Alibaba Nacos-服务注册与配置中心

    Spring Cloud Alibaba Nacos-服务注册与配置中心 官网:https://github.com/alibaba/nacos,Nacos官方中文手册 Nacos:Spring Cl ...

  8. C++ 传递数组引用

    不用额外变量可以在函数中得到数组长度信息,函数的形参声明为数组引用 #include <iostream> using namespace std; void f(int(&a) ...

  9. 14_编译FFmpeg

    本文来详细讲解一下:如何在Mac.Windows环境下成功编译FFmpeg. 目标 这里先提前说明一下,最后希望达到的效果: 编译出ffmpeg.ffprobe.ffplay三个命令行工具 只产生动态 ...

  10. Linux输入输出

    1.重定向概述 1.什么是重定向 将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中.比如:每天凌晨定时备份数据,希望将备份数据的结果保存到某个文件中. 这样第二天通过查看文件的内容就知道昨天备 ...