关键词:
简介:上海站 Flink Meetup 分享内容,腾讯数据湖的百亿级数据场景落地的案例分享。
本文整理自腾讯数据湖研发高级工程师陈俊杰在 4 月 17 日 上海站 Flink Meetup 分享的《百亿级实时数据入湖实战》,文章内容为:
- 腾讯数据湖介绍
- 百亿级数据场景落地
- 未来规划
- 总结
GitHub 地址
https://github.com/apache/flink
欢迎大家给 Flink 点赞送 star~
一、腾讯数据湖介绍
从上图可以看出来,整个平台比较大,包括了数据接入、上层的分析、中间的管理 (如任务管理,分析管理和引擎管理),再到最下层的 Table Format。
二、百亿级数据落地场景落地
1. 传统平台架构
如上图所示,过去的传统平台架构无非是两种,一种是 Lambda 架构,一种是 Kappa 架构:
Lambda 架构中,批和流是分开的,所以运维要有两套集群,一套是 For Spark/Hive,一套是 For Flink。这存在几个问题:
- 第一是运维的成本比较大;
- 第二是开发成本。例如在业务方面,一会要写 Spark,一会要写 Flink 或者 SQL,总体来说,开发成本对数据分析人员不是特别友好。
- 第二个是 Kappa 架构。其实就是消息队列,到底层的传输,再到后面去做一些分析。它的特点是比较快,基于 Kafka 有一定的实时性。
这两种架构各有利弊,最大的问题是存储可能会不统一,导致数据链路割裂。目前我们平台已经接入了 Iceberg,下面会根据不同场景,阐述遇到的问题及解决的过程。
2. 场景一: 手 Q 安全数据入湖
手机 QQ 安全数据入湖是一个非常典型的场景。
目前的业务场景是消息队列 TubeMQ 通过 Flink 落地成 ODS 到 Iceberg,然后再用 Flink 做一些用户表的关联,之后做成一个宽表去做一些查询,放到 COS 中,可能会在 BI 场景做一些分析。
这个过程看似平平无奇,但是要知道,手 Q 的用户关联维表为 28 亿,每天的消息队列是百亿级的,因此会面临一定的挑战。
小文件挑战
- Flink Writer 产生小文件
Flink 写入没有 shuffle,分发的数据无序,导致小文件多。
- 延迟要求高
checkpoint 间隔短,commit 间隔小,放大小文件问题。
- 小文件爆炸
几天时间元数据和数据的小文件同时爆炸,集群压力巨大。
- 合并小文件又放大问题
为了解决小文件问题,开 Action 进行小文件合并,结果产生更多文件。
- 来不及删数据
删除快照,删孤儿文件,但是扫描文件太多,namenode 压力巨大。
- Flink Writer 产生小文件
解决方案
Flink 同步合并
- 增加小文件合并 Operators;
- 增加 Snapshot 自动清理机制。
1)snapshot.retain-last.nums
2)snapshot.retain-last.minutes
Spark 异步合并
- 增加后台服务进行小文件合并和孤儿文件删除;
- 增加小文件过滤逻辑,逐步删除小文件;
- 增加按分区合并逻辑,避免一次生成太多删除文件导致任务 OOM。
- Flink 同步合并
把所有的 Data 文件 Commit 之后,会产生一个 Commit Result。我们会拿 Commit Result 生成一个压缩的任务,再给它并发成多个 Task Manager 去做 Rewrite 的工作,最终把结果 Commit 到 Iceberg 表里面。
当然,这里面的关键所在是 CompactTaskGenerator 怎么做。刚开始的时候我们想尽量地合并,于是去做表的 scan,把很多文件都扫一遍。然而它的表非常大,小文件非常多,一扫使得整个 Flink 立马挂掉。
我们想了个方法,每次合并完,增量地去扫数据。从上一个 Replace Operation 里面到现在做一个增量,看这中间又增了多少,哪些符合 Rewrite 的策略。
这里面其实有许多配置,去看达到了多少个 snapshot,或者达到了多少个文件可以去做合并,这些地方用户可以自己设置。当然,我们本身也设有默认值,从而保证用户无感知地使用这些功能。
- Fanout Writer 的坑
在 Fanout Writer 时,如果数据量大可能会遇到多层分区。比如手 Q 的数据分省、分市;但分完之后还是很大,于是又分 bucket。此时每个 Task Manager 里可能分到很多分区,每个分区打开一个 Writer,Writer 就会非常的多,造成内存不足。
这里我们做了两件事情:
- 第一是 KeyBy 支持。根据用户设置的分区做 KeyBy 的动作,然后把相同分区的聚集在一个 Task Manager 中,这样它就不会打开那么多分区的 Writer。当然,这样的做法会带来一些性能上的损失。
- 第二是做 LRU Writer,在内存里面维持一个 Map。
3. 场景二:新闻平台索引分析
上方是基于 Iceberg 流批一体的新闻文章在线索引架构。左边是 Spark 采集 HDFS 上面的维表,右边是接入系统,采集以后会用 Flink 和维表做一个基于 Window 的 Join,然后写到索引流水表中。
功能
- 准实时明细层;
- 实时流式消费;
- 流式 MERGE INTO;
- 多维分析;
- 离线分析。
场景特点
上述场景有以下几个特点:
- 数量级:索引单表超千亿,单 batch 2000 万,日均千亿;
- 时延需求:端到端数据可见性分钟级;
- 数据源:全量、准实时增量、消息流;
- 消费方式:流式消费、批加载、点查、行更新、多维分析。
挑战:MERGE INTO
有用户提出了 Merge Into 的需求,因此我们从三个方面进行了思考:
- 功能:将每个 batch join 后的流水表 Merge into 到实时索引表,供下游使用;
- 性能:下游对索引时效性要求高,需要考虑 merge into 能追上上游的 batch 消费窗口;
- 易用性:Table API?还是 Action API?又或是 SQL API?
解决方案
第一步
- 参考 Delta Lake 设计 JoinRowProcessor;
- 利用 Iceberg 的 WAP 机制写临时快照。
第二步
- 可选择跳过 Cardinality-check;
- 写入时可以选择只 hash,不排序。
第三步
- 支持 DataframeAPI;
- Spark 2.4 支持 SQL;
- Spark 3.0 使用社区版本。
4. 场景三:广告数据分析
广告数据主要有以下几个特点:
- 数量级:日均千亿 PB 数据,单条 2K;
- 数据源:SparkStreaming 增量入湖;
- 数据特点:标签不停增加,schema 不停变换;
- 使用方式:交互式查询分析。
遇到的挑战与对应的解决方案:
- 挑战一:Schema 嵌套复杂,平铺后近万列,一写就 OOM。
解决方案:默认每个 Parquet Page Size 设置为 1M,需要根据 Executor 内存进行 Page Size 设置。
- 挑战二:30 天数据基本集群撑爆。
解决方案:提供 Action 进行生命周期管理,文档区分生命周期和数据生命周期。
挑战三:交互式查询。
解决方案:
- 1)column projection;
- 2)predicate push down。
- 挑战一:Schema 嵌套复杂,平铺后近万列,一写就 OOM。
三、未来规划
对于未来的规划主要分为内核侧与平台侧。
1. 内核侧
在未来,我们希望在内核侧有以下几点规划:
更多的数据接入
- 增量入湖支持;
- V2 Format 支持;
- Row Identity 支持。
更快的查询
- 索引支持;
- Alloxio 加速层支持;
- MOR 优化。
更好的数据治理
- 数据治理 Action;
- SQL Extension 支持;
- 更好的元数据管理。
2. 平台侧
在平台侧我们有以下几点规划:
数据治理服务化
- 元数据清理服务化;
- 数据治理服务化。
增量入湖支持
- Spark 消费 CDC 入湖;
- Flink 消费 CDC 入湖。
指标监控告警
- 写入数据指标;
- 小文件监控和告警。
四、总结
经过大量生产上的应用与实践,我们得到三方面的总结:
- 可用性:通过多个业务线的实战,确认 Iceberg 经得起日均百亿,甚至千亿的考验。
- 易用性:使用门槛比较高,需要做更多的工作才能让用户使用起来。
- 场景支持:目前支持的入湖场景 还没有 Hudi 多,增量读取这块也比较缺失,需要大家努力补齐。
另外~《Apache Flink-实时计算正当时》电子书重磅发布,本书将助您轻松 Get Apache Flink 1.13 版本最新特征,同时还包含知名厂商多场景 Flink 实战经验,学用一体,干货多多!快点击下方链接领取吧~
https://developer.aliyun.com/article/784856?spm=a2c6h.13148508.0.0.61644f0eskgxgo
原文链接:https://developer.aliyun.com/article/785032?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
基于flink+iceberg的全场景实时数仓建设实践
...f0c;数据湖是顺应云时代发展潮流的新型技术架构,以Iceberg、Hudi、Delta为代表的解决方案应运而生,Iceberg目前支持Flink通过DataStreamAPI/TableAPI将数据写入Iceberg的表,并提供对ApacheFlink1.11.x的集成支持。本文由腾讯数据平... 查看详情
数据湖(十七):flink与iceberg整合datastreamapi操作
Flink与Iceberg整合DataStreamAPI操作目前Flink支持使用DataStreamAPI和SQLAPI方式实时读取和写入Iceberg表,建议大家使用SQLAPI方式实时读取和写入Iceberg表。Iceberg支持的Flink版本为1.11.x版本以上,目前经过测试Iceberg版本与Flink的版本对应关系... 查看详情
基于flink+iceberg的全场景实时数仓建设实践
...f0c;数据湖是顺应云时代发展潮流的新型技术架构,以Iceberg、Hudi、Delta为代表的解决方案应运而生,Iceberg目前支持Flink通过DataStreamAPI/TableAPI将数据写入Iceberg的表,并提供对ApacheFlink1.11.x的集成支持。本文由 查看详情
数据湖(十八):flink与iceberg整合sqlapi操作(代码片段)
文章目录Flink与Iceberg整合SQLAPI操作一、SQLAPI创建Iceberg表并写入数据1、创建新项目,导入如下maven依赖包2、编写FlinkSQL创建Iceberg表并写入数据3、在Hive中映射Iceberg表并查询二、... 查看详情
数据湖(十七):flink与iceberg整合datastreamapi操作(代码片段)
文章目录Flink与Iceberg整合DataStreamAPI操作一、DataStreamAPI实时写入Iceberg表1、首先在Maven中导入以下依赖2、编写代码使用DataStreamAPI将Kafka数据写入到Iceberg表3、在Kafka中创建代码中指定的“flink-iceberg-topic”并启动代码生产数据4、通... 查看详情
基于flinkcdc打通数据实时入湖
在构建实时数仓的过程中,如何快速、正确的同步业务数据是最先面临的问题,本文主要讨论一下如何使用实时处理引擎Flink和数据湖ApacheIceberg两种技术,来解决业务数据实时入湖相关的问题。01FlinkCDC介绍CDC全称是Ch... 查看详情
数据湖(二十):flink兼容iceberg目前不足和iceberg与hudi对比
Flink兼容Iceberg目前不足和Iceberg与Hudi对比一、Flink兼容Iceberg目前不足Iceberg目前不支持FlinkSQL查询表的元数据信息,需要使用JavaAPI实现。Flink不支持创建带有隐藏分区的Iceberg表Flink不支持带有WaterMark的Iceberg表Flink不支持添加列、删... 查看详情
flink流处理的动态实时亿级全端用户画像系统视频课程分享
基于Flink流处理的动态实时亿级全端用户画像系统课程下载:https://pan.baidu.com/s/1YtMs-XG5-PsTFV9_7-AlfA提取码:639m项目中采用到的算法包含LogisticRegression、Kmeans、TF-IDF等,Flink暂时支持的算法比较少,对于以上算法,本课程将手把手带大... 查看详情
小迈科技xhologres:高可用的百亿级广告实时数仓建设(代码片段)
通过本文,我们将会介绍小迈科技如何通过Hologres搭建高可用的实时数仓。一、业务介绍小迈科技成立于2015年1月,是一家致力以数字化领先为优势,实现业务高质量自增长的移动互联网科技公司。始终坚持以用户价... 查看详情
汽车之家基于flink+iceberg的湖仓一体架构实践
...责人邸星星在4月17日上海站Meetup分享的,基于Flink+Iceberg的湖仓一体架构实践,内容包括:数据仓库架构升级的背景基于Iceberg的湖仓一体架构实践总结与收益后续规划Tips:点击文末「阅读原文」即可查看原文视... 查看详情
flink系列之:flinkcdc实现海量数据入湖
Flink系列之:FlinkCDC实现海量数据入湖一、历史数据入湖架构二、核心需求三、选择FlinkCDC原因四、FlinkCDC2.0原理五、支持全量与增量日志流并行读取一、历史数据入湖架构二、核心需求全量增量自动切换,并保证数据准确... 查看详情
flink+iceberg+对象存储,构建数据湖方案
...上海站FlinkMeetup分享内容,如何基于Flink、对象存储、Iceberg来构建数据湖生态。本文整理自Dell科技集团高级软件研发经理孙伟在4月17日上海站FlinkMeetup分享的《Iceberg和对象存储构建数据湖方案》,文章内容为:数据湖... 查看详情
flink+iceberg+对象存储,构建数据湖方案
...上海站FlinkMeetup分享内容,如何基于Flink、对象存储、Iceberg来构建数据湖生态。本文整理自Dell科技集团高级软件研发经理孙伟在4月17日上海站FlinkMeetup分享的《Iceberg和对象存储构建数据湖方案》,文章内容为:数据湖... 查看详情
基于流计算oceanus和elasticsearchservice构建百亿级实时监控系统
为什么要构建监控系统作者:龙逸尘,腾讯CSIG高级工程师在后移动互联网时代,良好的用户体验是增长的基础,稳定的使用体验就是用户体验的基础。大型的互联网公司,特别是面向C端客户的公司,对业... 查看详情
flink:roaringbitmap在亿级用户实时uv精确去重中应用(代码片段)
未完目录1 RoaringBitmap概念 2位图的比较3 科学文献4API文档5java示例6 使用内存映射位图7 roaringbitmap案例1 RoaringBitmap概念 位集,也称为位图,通常用作快速数据结构。不幸的是,它们可能会使用太多内存。为了弥... 查看详情
数据湖(十六):structuredstreaming实时写入iceberg
StructuredStreaming实时写入Iceberg目前Spark中StructuredStreaming只支持实时向Iceberg中写入数据,不支持实时从Iceberg中读取数据,下面案例我们将使用StructuredStreaming从Kafka中实时读取数据,然后将结果实时写入到Iceberg中。一、创建Kafk... 查看详情
flink系列之:基于flinkcdc2.0实现海量数据的实时同步和转换
Flink系列之:基于FlinkCDC2.0实现海量数据的实时同步和转换一、CDC技术二、FlinkCDC技术三、传统数据集成方案的痛点1.传统数据入仓架构1.02.传统数据入仓架构2.03.传统CDCETL分析四、基于FlinkCDC的海量数据的实时同步和转换1.FlinkCDC增... 查看详情
elasticsearch实战(五十)-让elasticsearch飞起来!百亿级数据存储与查询优化实战!!!
——continue 查看详情