解决方案:基于Flink的高可靠实时ETL系统

优采云 发布时间: 2022-11-02 15:42

  解决方案:基于Flink的高可靠实时ETL系统

  GIAC(GLOBAL INTERNET ARCHITECTURE CONFERENCE)是由长期关注互联网技术和架构的高可用架构技术社区和msup发起的面向架构师、技术领袖和高端技术从业者的年度技术架构会议。这是中国最大的技术。其中一次会议。

  在今年的第六届GIAC大会上,腾讯数据平台部实时计算负责人石晓刚以大数据架构为主题,发表了“基于Flink的高可靠实时ETL系统”的主题演讲。以下为嘉宾致辞实录:

  石晓刚毕业于北京大学,获得博*敏*感*词*。并且是 Apache Flink 项目的 Committer。在SIGMOD、TODS、IPDPS等国际顶级会议和期刊发表多篇论文,并担任KDD、DASFAA等国际顶级会议的程序委员会成员。实时计算平台Oceanus 近年来,实时计算在腾讯的应用越来越广泛。为了提高用户流计算任务持续集成和持续发布的效率,腾讯大数据团队从2017年开始围绕Flink打造Oceanus,一个集开发、测试、部署、运营于一体的一站式可视化实时计算平台,维护。

  Oceanus提供Canvas、SQL、Jar三种不同的应用开发方式,满足不同用户的开发需求。通过这三种方式,不同应用场景的用户无需了解底层框架的技术细节,即可快速开发实时计算任务,降低用户开发门槛。

  完成作业开发后,用户可以通过 Oceanus 对作业进行测试、配置和部署。Oceanus 为用户程序提供了一系列工具来辅助作业测试。用户既可以使用Oceanus提供的一键生成功能生成测试数据,也可以将自己的测试数据上传到Oceanus,通过比较预期结果和实际结果来验证应用逻辑的正确性。Oceanus 依靠腾讯内部资源调度系统 Gaia 进行资源管理和作业部署。用户可以通过Oceanus配置作业所需的CPU和内存资源,指定作业需要部署的集群。用户完成配置后,Oceanus 会向 Gaia 申请相应的资源,并将作业提交给 Gaia 运行。

  Oceanus 对 Flink 作业的多个运行指标执行采集,包括 Task Manger 的内存、I/O 和 GC。通过这些丰富的运行指标,用户可以很好地了解应用的运行情况,并在出现异常时帮助用户及时定位问题。运维人员可以通过这些采集获取的指标设置告警策略,实现精细化操作。

  在Oceanus之上,腾讯大数据还为ETL、监控告警、在线学习等常见实时计算任务提供场景化支持。例如,Oceanus-ML 提供端到端的在线机器学习,涵盖数据访问、数据处理、特征工程、算法训练、模型评估和模型部署的整个机器学习过程。借助Oceanus-ML,用户可以轻松使用完整的数据处理功能和丰富的在线学习算法构建自己的在线学习任务,轻松完成模型训练和评估,一键部署模型。

  针对ETL场景,Oceanus还提供Oceanus-ETL产品,帮助用户将应用和产品中的采集数据实时导入数据仓库。目前,腾讯大数据团队为腾讯内部多个业务提供数据接入服务,包括微信、QQ音乐、腾讯游戏等。每天处理的消息量超过40万亿条,每秒访问峰值超过40亿条。

  实时数据访问平台 Oceanus-ETL

  腾讯大数据早在2012年就开始数据接入,并基于Storm打造了第一代腾讯数据银行(TDBank),成为腾讯大数据平台的前线,提供文件、消息和数据库等多种接入方式,统一数据访问门户,并提供高效、实时的分布式数据分发。

  

  2017年,腾讯大数据基于Flink在易用性、可靠性和性能方面的优势,重构了TDBank通过Flink的数据访问。与 Storm 相比,Flink 提供了更多的状态支持。一方面,Flink 将程序的状态保存在本地内存或 RocksDB 中,用户无需通过网络远程访问状态数据,可以获得更好的工作性能。另一方面,Flink 通过 Chandy-Lamport 算法提供了一种高效、轻量级的检查点机制,可以保证 Exactly Once 和 At-Least Once 的数据处理语义在发生故障时仍然可以实现。

  随着腾讯业务规模的不断扩大,对数据接入也提出了更高的要求。

  为了满足上述需求,我们今年引入了 Iceberg,通过 Iceberg 提供的 ACID 事务机制和增量更新能力,提供更可靠、更强大的数据访问服务。

  基于 Flink 实现端到端的 Exactly Once 传输

  Flink 使用 checkpoint 机制来备份和恢复任务状态。在任务失败的情况下,可以从上次备份的状态恢复任务,而无需从头开始重新执行。通过 checkpoint 机制,Flink 可以保证在发生故障的情况下仍然可以实现 Exactly Once 的数据传输。

  但在整个数据接入环节,除了Flink之外,还包括上游中间件、下游数仓等多个组件。仅仅依靠 Flink 的 checkpoint 机制只能保证 ExactlyOnce 在 Flink 作业内的数据传输,而不能保证端到端的 ExactlyOnce 在整个数据访问链路中的传输语义。如果我们将 Flink 接收到的数据直接写入下游存储系统,那么当 Flink 发生故障并从故障中恢复时,自上一个 checkpoint 以来写入下游存储系统的数据会出现重复,导致后续数据分析出错。

  为了保证端到端的 Exactly Once 数据传输,TDBank 使用 Flink 的 checkpoint 机制实现了两阶段提交协议,对数据访问的各个环节产生的指标进行聚合和协调,以保证数据的端到端. 传输可靠性。

  为了保证数据链接的 Exactly Once,我们首先将 Flink 接收到的数据写入一个临时目录,并保存写入的文件列表。当检查点执行时,我们会将这些文件的列表保存到检查点并记录下来。并且当检查点完成时,Flink 会通知所有节点。此时,这些节点会将checkpoint中保存的文件移动到官方目录。

  在这个实现中,Flink 使用现有的 checkpoint 机制来实现两阶段提交机制。所有节点在执行 checkpoint 时都会执行 pre-commit 操作,并将所有数据先写入可靠的分布式存储。当 JobManager 上的检查点完成时,事务被视为已提交。所有节点在收到检查点成功消息后都会完成最后的事务提交操作。

  如果任何节点在执行最后一个文件移动时发生故障,Flink 作业将从最后一个完成的检查点恢复,并从最后一个完成的检查点获取文件的完整列表。Flink 作业会检查此文件列表中的文件,并将所有尚未移动的文件移动到最终目录。

  为了保证整个访问过程中数据不会丢失和重复,我们会采集并核对整个数据链路中各组件收发的数据数量。由于通用指标体系无法保证指标的及时性和正确性,我们也基于 Flink 实现了高可靠一致的指标聚合。

  

  与数据链路类似,我们也使用 Flink 的 checkpoint 机制来保证指标数据的一致性。我们通过 Flink 对 采集 接收到的指标进行细粒度的聚合,并在执行检查点时将这些聚合的指标保存到外部存储中。在保存聚合指标时,除了一般的标签外,我们还会在写入这些指标时带上检查点编号。当检查点完成时,每个节点也会将完成的检查点编号记录到外部存储中。当我们需要查询指标时,只需将完成的检查点编号与聚合指标连接起来,即可获得一致的指标结果。

  通过 Flink 的 checkpoint 机制,我们可以保证数据链路和指标链路中数据传输和指标聚合的一致性,保证整个数据访问链路中端到端的 Exactly Once 数据传输。

  基于 Iceberg 的 ACID 实时数据访问

  Apache Iceberg 是一种通用的表格格式(数据组织格式),可以适配 Presto、Spark 等引擎,提供高性能的读写和元数据管理功能。Iceberg的定位是在计算引擎下的存储之上。它是一种被冰山称为“表格格式”的数据存储格式。准确地说,它是介于计算引擎和数据存储格式之间的一种数据组织格式——数据和元数据以特定的方式进行组织,因此称其为数据组织格式更为合理。

  Iceberg 通过锁定机制实现 ACID 功能。它从元存储中获取锁,并在每次更新元数据时更新它。同时,Iceberg 保证了线性一致性(Serializable 隔离),保证了表修改操作是原子的,读操作永远不会读取部分或未提交的数据。Iceberg 提供了乐观锁机制来减少锁的影响,并使用冲突回退和重试机制来解决并发写入引起的冲突。

  Iceberg 基于 ACID 能力,提供类似于 MVCC 的读写分离能力。首先,每次写操作都会产生一个新的快照(snapshot),总是向后线性递增,保证线性一致性。读取操作只读取现有的快照,对正在生成的快照读取操作是不可见的。每个快照都有当时表的所有数据和元数据,从而为用户提供了对表数据进行时间旅行的能力。使用 Iceberg 的时间旅行能力,用户可以读取当时的数据,同时也为用户提供回滚快照和重放数据的能力。

  与 Hudi 和 Delta Lake 相比,Iceberg 提供了更完整的表格格式能力、类型定义和操作的抽象,以及与上层数据处理引擎和底层数据存储格式的解耦。此外,Iceberg 在设计之初并没有绑定特定的存储引擎,同时避免了与上层引擎的相互调用,从而可以轻松扩展 Iceberg 以支持不同的引擎。

  在数据访问上,通过 Iceberg 可以保证 ACID 事务和强一致性,实现“只写一次”;读写分离使交互式查询引擎(如Hive和Presto等)能够在第一时间读取到正确的数据;行级更新和删除支持通过计算引擎进行数据修正;增量消费使落地数据进一步返回到流引擎,只处理变化的部分并向后传递;冰山高效的查询能力,还可以省去 MySQL 或 ClickHouse 等环节的导入,直接被报表和 BI 系统消费。

  为了能够使用 Iceberg,腾讯大数据实现了支持 Iceberg 的 Flink 连接器,让 Flink 可以将数据写入 Iceberg。Flink 的 Iceberg Sink 由两部分组成,一个叫 Writer,一个叫 Committer。Writer负责将接收到的数据写入外部存储,形成一系列DataFile。目前,腾讯为了简化适配,最大限度地利用现有逻辑,使用Avro作为数据的中间格式。后续社区将引入 Flink 内置类型转换器,使用 Iceberg 内置数据类型作为输入。当 Writer 执行 checkpoint 时,Writer 会关闭自己的文件,并将构造好的 DataFile 发送给下游的 Committer。

  提交者在 Flink 作业中是全局唯一的。Committer 收到所有上游 writer 发送的 DataFiles 后,会将这些 DataFiles 写入一个 ManifestFile,并将 ManifestFile 保存到 checkpoint。当 checkpoint 完成后,Committer 会通过 merge append 将 ManifestFile 提交给 Iceberg。Iceberg会通过一系列操作完成commit操作,最终使新增的数据对下游数仓可见。

  腾讯对 Iceberg 做了很多改进和优化。除了支持 Flink 的读写操作,腾讯还完成了行级的删除和更新操作,大大节省了数据修改和删除的成本。同时,腾讯还对 Spark 3.0 中的 Data Source V2 进行了适配,利用 Spark 3.0 中的 SQL 和 DataFrame 无缝对接 Iceberg。

  在未来的工作中,腾讯将继续提升 Iceberg 的核心能力,包括:

  解决方案:seo优化工具-让网站自动SEO优化排名的免费工具

  SEO优化工具,什么是SEO优化工具?什么是SEO优化工具?首先,SEO优化工具可以帮助我们网站实现收录和排名。SEO优化工具种类繁多,但很难有一个覆盖SEO全网的功能。今天给大家分享一个覆盖全网的。具有SEO功能的SEO工具,自动文章更新,自动伪原创,自动生成网站地图,自动推送搜索引擎收录,自动抓取网站链接,自动关键词 挖掘等等。详细参考图片,善用SEO优化工具,让我们的排名快速上升。

  元标签分析:关于元标签,有三个位置:标题、关键字和描述。没有它们也可以添加其他元标记。就重要性而言,标题在页面优化中起着重要作用。从 SEO 的角度来看,标题写作应该尽量不要堆积太多 关键词。如果是长标题,可以收录关键字1-2次,关键字不需要太接近。

  关键词 标记在页面优化方面过去没有以前那么重要了。SEO优化工具甚至很多SEO行业的老大都说关键词标签没用,没用也没关系。但Q猪还是认为,在页面优化上,要认真写关键词标签,即使搜索引擎在页面排名中不考虑关键词,至少关键词可以提示搜索引擎。

  描述标签,在搜索引擎中搜索关键词时,如果描述标签中收录对应的关键词,搜索引擎会用红色字体标注。如果描述标签写得好,可以提高页面的点击率。

  文本优化分析:文本写作,最重要的元素是自然写作,如何在其中收录关键词,可以参考,高考作文。使用关键词作为标题,然后将关键词包裹起来自然写。SEO优化工具不应该死板地将需求优化的关键词直接导入文章。例如,文章 是对 网站 的介绍,但中间有美女 关键词。

  

  文章 内容页面优化的另一个重要元素是尝试在文章 中使用同义词和关键字同义词。例如,文章 介绍了 网站 的创建。在编写内容时,在某些地方,当涉及到 网站build 时,seo 优化工具可以使用来自相关类别的短语,例如 网站manufacturing、网站design。

  H/ALT标签分析:H标签主要包括H1和H2标签。H1是标题,H2是副标题。基本上,H3 之后的标签在 文章 中很少使用。从这个意义上说,最重要的关键词放在H1标签中,与关键词相关的短语放在H2标签中,依次推回。

  其实关于网页内容的优化,H1和H2标签的作用正在逐渐减弱,但是对于普通的页面写作来说,文章的标题应该出现在H1标签中,副标题应该是显示在 H2 标签中。

  由于搜索引擎很难读取图片,所以在普通的写作中,我们需要使用 ALT 标记来注释添加的图片。当然,对于图像的理解,周围的文字也起到了一定的作用。例如,SEO 优化工具正在讨论在 网站 页面优化中使用 ALT 标志。如果你现在插入一张图片,即使图片没有在代码中解析,搜索引擎也会认为这是一张关于 ALT 标签使用的图片。

  做SEO不仅仅是为了关键词的排名,SEO工具的最终目的是给网站带来流量,获得转化,只要关键词的排名,没有流量,所以没有意义,所以我们在选择和优化关键词的时候,一定要知道怎么用关键词给网站带来流量。

  1、了解行业和用户

  

  在我们为网站选择关键词之前,我们首先要对要优化的网站所在的行业有一个基本的了解,比如它的业务形态是什么?网站如何赚钱?目标客户群的特点是什么?他们有什么样的搜索习惯?他们对 seo 优化工具有什么顾虑?等等,在完成这些基本调查之后,我们将它们放入表格中。基于我们产品和服务的优势,从用户的搜索习惯和行业特点出发,将第一批原创关键词扩展为我们下一步再加工的原创素材。

  2. 关键词选择要合理,与网站的主题高度相关

  在选择关键词的时候,要根据网站本身的定位来选择,不然会觉得无法优化。例如,信息丰富的网站选择购物网站应用关键词。如果关键词和网站的话题关系过于密切,不仅不会给网站带来流量,SEO优化工具也可能被搜索引擎认为是作弊。你的 网站 将受到惩罚。

  3.用百度索引选择关键词

  确认网站的主关键词后,可以去百度索引查看,直接输入你的关键词。下面你可以看到这个关键词的百度索引。带有索引关键字的 SEO 优化工具代表了一定数量的用户搜索。选择这样的关键词stop 排名,可以为网站 带来流量。当然,这不是一件简单的事情。

  4、合理应用长尾关键词获取流量

  很多SEO朋友都知道网站长尾关键词排名带来的流量占总流量的一半以上,长尾关键词带来的流量是转化的进入产品客户下单的概率远高于目的关键词,seo优化工具目的性强,转化率高由于这个本地搜索人群,最重要的是长尾关键词 更容易优化,因此可以达到乘数效应。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线