解决方案:*敏*感*词*趣解Flink实时数仓:搬橡果

优采云 发布时间: 2022-12-10 14:52

  解决方案:*敏*感*词*趣解Flink实时数仓:搬橡果

  1 底漆(移动橡子)

  入冬了,我和小伙伴们开始囤年货了。

  今年干了半年多,我们收获了一整车的橡子。我们小松鼠喜欢把这些心爱的橡子放在储藏室里。

  于是我今天早早起床,开始搬这些橡子。

  过了一会儿,慧慧突然告诉我,她想吃昨天摘的一个灰色的小橡子。

  我看着眼前堆积如山的年货,苦恼地摸了摸自己的脑袋:等我搬到那个给你。

  慧慧很不高兴,嘀咕道:为什么我们昨天一脱下来就不能动呢?

  我解释说:我们每年存的钱只够买一辆车一起搬家吗?

  看着一旁生气的灰灰,我放慢了背的速度~

  抬头看着高高的橡子堆,他叹了口气。他一边拿着,一边寻找自己想要的小橡子。. .

  今天怕是走不动了~

  2 慢还是快?

  总而言之,我们在故事中遇到了一些小烦恼:

  关键词:速度慢、体量大、时效性差、搜索快、溯源性差。.

  带着这个小故事,我回到了本文的主题。

  这些关键词也是企业实时数仓建设中经常遇到的一些困难和诉求。

  2.1 企业实时数仓建设需求

  大多数企业都面临着数据来源多、结构复杂的问题。为了更好地管理数据和赋能价值,他们往往在集团和部门内部建立数据仓库。

  一般初期的数据仓库开发流程大致如下:

  初始业务数据仓库开发过程

  可以想象,随着业务需求的不断增加,这种烟囱式的开发模式会暴露出很多问题:

  为此,大量企业的数据团队开始规划数据仓库,对数据进行分层。

  数据仓库分层架构

  数据组织成分层存储,每一层独立处理。整体遵循自下而上的构建思路,最大限度地为数据赋能。

  2.2 稳定的离线数据仓库

  商业场景

  要求每天出具每日用户访问PV和UV流量报表,并将结果输出到业务数据库

  在前期的规划中,在对实时数据要求不高的前提下,我们一开始基本上会选择搭建离线数仓。

  离线数仓建设流程

  1)技术实现

  2)优点和缺点

  3)改进

  既然知道了 Hive 的计算速度比较慢,但是我们又不想放弃它高效的存储和查询功能。

  那我们试试另一个计算引擎:Spark。

  Spark离线数仓流程

  整体流程不变,主要是Spark负责ods->dwd->dws层的数据处理。效果很明显,比Hive计算快很多。

  注意Spark是内存级别的计算引擎,需要合理规划内存大小,防止OOM(内存泄漏)。

  目前,两个离线数仓完美满足了业务需求。第二天领导看了报表统计,结果大家都很开心~

  现在考虑另一种场景:你不想等到第二天才能看到结果,你需要实时显示指标。这时候就需要搭建一个实时数据仓库。

  3 冗余还是可追溯性?

  商业场景

  实时统计每秒用户访问PV、UV流量报表,结果输出到业务数据库,支持历史数据回顾

  既然要求达到实时效果,首先要考虑优化处理计算过程。因此,需要更换Spark,使用Flink计算引擎。

  在技​​术实现上,业界常用的实时数仓架构有两种:Lambda架构和Kappa架构。

  3.1 Lambda架构

  

  顾名思义,Lambda架构保留了实时和离线两种处理流程,即实时数仓和离线数仓最终会同时构建。

  Lambda架构实时数仓流程

  1)技术实现

  2)优点和缺点

  3)改进

  针对同一个数据源被处理两次这一点,对上述Lambda架构进行了改进。

  改进的 Lambda 实时数据仓库流程

  通过定时刷新实时技术流各层计算结果到离线数仓,数据源唯一读取。大大减少了数据的重复计算,加快了程序的运行时间。

  总结:数据存储,计算冗余;历史数据可追溯

  3.2 Kappa架构

  为了解决上述模式下数据的冗余存储和计算问题,降低技术架构的复杂度,这里引入另一种模式:Kappa架构。

  Kappa实时数仓流程

  1)技术实现

  2)优点和缺点

  总结:数据存储只计算一次;史料难以追溯

  总的来说,虽然第一种Lambda架构有很多缺点,但它具有程序健壮性和数据完整性,所以在企业中使用会更多。

  相反,Kappa 架构使用较少。因为Kappa架构只使用Kafka作为存储组件,需要同时满足数据完整性和实时读写,这显然很难实现。

  Kappa架构的实时数仓之路将何去何从?

  4 数据湖与实时数据仓库

  我们理解Kafka的定位是消息队列,可以作为热点数据的缓存介质,但不适合数据的查询和存储。

  如果我们能找到一个替代 Kafka 的实时数据库就好了。.

  预期要求

  1)能够支持数据回溯和数据更新

  2)实现数据批量流式读写,支持实时访问

  4.1 数据湖技术

  近年来,随着数据湖技术的兴起,似乎出现了一线希望。

  (图源网络)

  目前市场上最流行的三种数据湖:Delta、Apache Hudi 和 Apache Iceberg。

  其中Delta和Apache Hudi对大部分计算引擎的支持都不够,尤其是Delta完全源自Spark,不支持Flink。

  其中Iceberg和Flink已经完全实现了对接机制。看看它的特点:

  4.2 kappa架构升级

  因此,考虑升级Kappa架构。使用Flink+Iceberg(Hudi)技术架构可以解决Kappa架构中的一些问题。

  升级Kappa实时数仓流程

  目前,Flink 社区对 Iceberg(Hudi)的构建已经逐渐成熟,不少已经开始基于 Flink + Iceberg(Hudi)构建企业级实时数仓。

  更多实时数仓问题可以咨询我的wx:youlong525。

  5 电商零售实时数仓实践

  纸上谈兵总是肤浅,这里简单介绍一下老手之前做过的实时数仓案例。

  使用的技术栈可能有点老,主要讨论构建思路。

  5.1 技术架构

  电商零售实时数仓技术架构

  系统整体采用Flink+Spark+Kafka为主要技术栈,自下而上构建电商零售实时数据仓库,最终提供统一的数据服务。

  1)底层利用Flink CDC技术实时抽取源数据,包括业务系统和第三方嵌入式数据(客户中心、营销中心、销售中心)。

  // data格式

{

"data": [

{

"id": "13",

"order_id": "6BB4837EB74E4568DDA7DC67ED2CA2AD9",

"order_code": "order_x001",

<p>

"price": "135.00"

}

]

}

// flink cdc (示例)

CREATE TABLE order_detail_table (

id BIGINT,

order_id STRING,

order_code STRING,

price DECIMAL(10, 2)

) WITH (

&#39;connector&#39; = &#39;kafka&#39;,

&#39;topic&#39; = &#39;order_binlog&#39;,

&#39;properties.bootstrap.servers&#39; = &#39;localhost:9092&#39;,

&#39;properties.group.id&#39; = &#39;group001&#39;,

&#39;canal-json.ignore-parse-errors&#39;=&#39;true&#39;

);

</p>

  2)数据源经过计算引擎和决策引擎转换,构建实时详细、实时轻度汇总、实时高层汇总模型,对应数据仓库层:DWD、DWS , ADS 层。

  初步规划技术栈为Spark Streaming + Kafka。后来由于实时性要求,改为Flink + Kafka来满足秒级响应。

  电商实时数仓处理流程图

  3)建立实时数据仓库模型后,将数据传输到存储介质中。包括ES、Redis、Mysql、Kafka等,最终对外提供API共享服务访问。

  // 存储介质API服务

val esServices = new EsHandler[BaseHandler](dataFlows)

val kafkaServices = new KafkaHandler[BaseHandler](dataFlows)

val redisServices = new RedisHandler[BaseHandler](dataFlows)

val jdbcServices = new JDBCHandler[BaseHandler](dataFlows)

esServices.handle(args)

kafkaServices.handle(args)

redisServices.handle(args)

jdbcServices.handle(args)

  4)最后对外提供API服务,为智能推荐、会员画像、数据挖掘、营销大屏等应用服务提供数据支持。

  5.2 数据流

  电商实时数仓数据流图

  总体来说,从上到下,数据经过采集 -&gt; 数据仓库详细处理、汇总 -&gt; 应用步骤,提供实时数据仓库服务。

  下面是用户分析的数据流程和技术路线:

  采集用户行为数据,统计用户曝光和点击信息,构建用户画像。

  电商实时数仓用户分析数据流程

  6 实时数仓优化总结

  1)实时数仓是Lambda架构还是Kappa架构?

  这个没有标准答案。这里给个建议: 一般中小型项目可能需要保证历史数据的完整性。推荐使用Lambda架构提供离线流程保障。目前Kappa架构用得不多,受场景和实时技术栈因素影响。

  2)数据丢失了怎么办?

  如果数据源丢失,可以重新消费(偏移位置);如果Flink窗口数据有延迟:可以手动增加延迟时间来延迟关闭窗口;或者使用side output stream将延迟的数据保存起来,然后合并;也可以延迟数据写入存储介质,以便后续统一处理。

  3)实时计算中的数据重复怎么办?

  4)如何进行多个实时流的JOIN

  Flink 内部提供了 JOIN 算子操作,包括 JOIN、window JOIN、Interval Join、connect 等算子。具体可以参考我的Flink双流JOIN文章。

  5)如何调度实时任务和离线任务

  给YARN任务打标签,分离离线和实时任务,提交作业时指定Label;同时调整Yarn调度参数,合理分配多个容器执行。

  技巧:爱站SEO工具包使用异地排名操作方法

  爱站 SEO 工具包值得

  使用,但爱站 SEO 工具包如何使用站外排名?那么下面我们来介绍一下使用站外排名爱站SEO工具包的操作方法,相信一定会对大家有所帮助。1.打开爱站工具包,您将在异地查看爱站 SEO 工具包值得

  

  使用,但爱站 SEO 工具包如何使用站外排名?那么下面我们来介绍一下使用站外排名爱站SEO工具包的操作方法,相信一定会对大家有所帮助。

  1.打开爱站工具包,您将看到此工具用于站外排名。

  

  2、点击远程查询,在搜索引擎中输入你想找的搜索引擎,输入你关键词

  想要在关键词列中查找,在域名区域输入域名地址,直接点击查询,会看到可以查询的结果,如图所示:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线