解决方案:*敏*感*词*趣解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 (
'connector' = 'kafka',
'topic' = 'order_binlog',
'properties.bootstrap.servers' = 'localhost:9092',
'properties.group.id' = 'group001',
'canal-json.ignore-parse-errors'='true'
);
</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 数据流
电商实时数仓数据流图
总体来说,从上到下,数据经过采集 -> 数据仓库详细处理、汇总 -> 应用步骤,提供实时数据仓库服务。
下面是用户分析的数据流程和技术路线:
采集用户行为数据,统计用户曝光和点击信息,构建用户画像。
电商实时数仓用户分析数据流程
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、点击远程查询,在搜索引擎中输入你想找的搜索引擎,输入你关键词
想要在关键词列中查找,在域名区域输入域名地址,直接点击查询,会看到可以查询的结果,如图所示: