首页 > 其他分享 >实时数仓构建:Flink+OLAP查询的一些实践与思考

实时数仓构建:Flink+OLAP查询的一些实践与思考

时间:2024-04-15 20:57:33浏览次数:23  
标签:数仓 场景 Flink 实时 查询 OLAP

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

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
From: https://www.cnblogs.com/lubians/p/18136877

相关文章

  • Flink源码学习(4) TaskManager从节点启动分析
    taskManager是flink的worker节点,负责slot的资源管理和task执行一个taskManager就是一台服务器的抽象TaskManager基本资源单位是slot,一个作业的task会部署在一个TM的slot上运行,TM会负责维护本地的slot资源列表,并与Master和JobManager进行通信启动主类:TaskManagerRunnerTaskMan......
  • 数仓调优实战:GUC参数调优
    本文分享自华为云社区《GaussDB(DWS)性能调优系列实战篇七:十八般武艺之GUC参数调优》,作者:黎明的风。1.前言适用版本:【8.1.1及以上】GaussDB(DWS)性能调优系列专题文章,介绍了数据库性能调优的思路和总体策略。在系统级调优中数据库全局的GUC参数对整体性能的提升至关重要,而......
  • 数仓建模—建模方法论之Data Vault 建模
    数仓建模方法论—DataVault建模除了Kimball的维度建模理论,DataVault也是数据仓库建模的一种方法,最早由DanLinstedt在20世纪90年代提出,主要应用于企业级数据仓库建模。不同于三范式数据仓库模型、维度模型,DataVault模型主要用于存储来自多个业务系统的完整的历史......
  • 离线数仓(九)【DWS 层开发】
    前言    上一个DWD层用了半个月时间,但是慢有慢的好处;今天开始DWS层的学习,目标是4月初把项目完成,完了赶紧从头回顾一遍项目。    今天操场跑了20分钟,顺便在这里记录一下,现在每周只有没早八的时候能跑一下了,近一年没有好好跑步了,这个习惯应该找回来了......
  • FlinkSQL Unable to create a source for reading table 'default_catalog.default_da
    问题描述使用FlinkSql的jdbc连接器读取mysql的一张表,总是提示 Exceptioninthread"main"org.apache.flink.table.api.ValidationException:Unabletocreateasourceforreadingtable'default_catalog.default_database程序代码publicstaticvoidmai......
  • SpringBoot集成Flink-CDC,实现对数据库数据的监听
    一、什么是CDC?  CDC是 ChangeDataCapture(变更数据获取) 的简称。核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。二、Flink-CDC是什么?CDCConnector......
  • Flink入门
    1.Flink架构Flink的角色Client:获取、转换、提交代码给jm.JM:对job做任务调度,再对job进一步处理转换,然后分发给TM.TM:数据处理.部署模式区别:集群的生命周期和资源的分配方法,代码的main方式在client执行还是JM执行。session会话:启动一个集群保持会话,通过client提交作......
  • Flink源码
    1.源码编译flink-1.19jdk-1.8scala-2.12mvm-3.86自定义日志:注意修改8081端口,可能被占用;windows日志的路径命名不能包含:,要改名自定义jar-Dlog.file=./log/flink-tm-1.local.log-Dlog4j.configuration=./a_conf/log4j.properties-Dlog4j.configurationFile=./a_conf/l......
  • 解密数仓的SQL ON ANYWHERE技术
    本文分享自华为云社区《GaussDBDWS的SQLONANYWHERE技术解密》,作者:tooooooooooomy。1.前言适用版本:【8.1.1(及以上)】查询分析是大数据要解决的核心问题之一,虽然大数据相关的处理引擎组件种类繁多,并提供了丰富的接口供用户使用,但相对传统数据库用户来说,SQL语言依然是使用最......