阿里云实时计算Flink的产品化思考与实践【上】

摘要:本文整理自阿里云高级产品专家黄鹏程和阿里云技术专家陈婧敏在 FFA 2023 平台建设专场中的分享。内容主要为以下五部分:

  1. 阿里云实时计算 Flink 简介
  2. 产品化思考
  3. 产品化实践
  4. SQL 产品化思考及实践
  5. 展望

该主题由黄鹏程和陈婧敏共同完成,前半程由黄鹏程分享,主要分为四个部分:第一部分,阿里云实时计算 Flink 简介;第二部分,结合自身产品化的经验谈产品化的思考;第三部分,分享产品化的实践,即阿里云在产品化思考的基础上进行的实践;第四部分,对 Flink 未来进行展望。

中间由陈婧敏老师分享阿里云 Flink 在 SQL 层面做的深入优化和产品化相关的功能。

一、阿里云实时计算 Flink 简介

1、阿里云推动 Flink 技术进步和繁荣的过程

2016 年起,阿里巴巴集团便在流计算领域(非 Flink 技术)开始了相关的研发工作。随后的 2017 年和 2018 年,市场上出现了广为人知的 Flink 产品/技术,该技术是在阿里巴巴集团通过收购 Flink 创始公司 Ververica 之前,阿里云团队内部开发的版本。到了 2019 年左右,阿里云团队正式完成对 Flink 的创始公司 Ververica 的收购,此次合作由中德双方的团队共同推进,旨在推动 Flink 技术在云计算平台上的商业化项目。从 2020 年起至今,约三年的时间里,Flink 技术的社区活跃度显著提升。无论是在中国大陆地区还是之前在西雅图举办的全球会议上,都可以观察到越来越多的用户开始采用 Flink 技术,逐步取代了storm、jstorm、spark streaming 等过去的流计算框架。

2、阿里云推动 Flink 在阿里集团大规模使用

阿里云不仅致力于相关技术的发展,同时也为阿里巴巴集团提供服务,支撑了集团众多业态的运营。在诸多计算规模和服务场景中,可以观察到集团各业态对 Flink 实时计算任务的依赖。

3、阿里云 Flink 对外提供云服务

这部分分为两大部分:首先是平台层面,阿里云的 Flink 服务在其控制台具备多项功能,旨在简化客户的开发和运维过程;其次是企业级 Flink 引擎,该引擎以 Apache Flink 的开源核心为基础,保证与开源版本的完全兼容,并在此基础上新增更多特色功能。接下来的分享将深入介绍阿里云团队所开发的功能、我们的产品落地考量以及整个行业现状的思考。

二、产品化思考

1、实时数据处理的应用场景

尽管各个公司的具体业务形态和所在行业存在明显差异,但它们总体上可归纳至以下几个主要范畴中:

2、实时数据处理的技术场景

上图中抽取了一部分概念或技术性的场景,这涉及到以下几个问题:首先是数据的基本流式处理 ETL/ELT,包括更细分的 CDC(变更数据捕获)、实时元数据的管理、实时数据分析、实时数据的存储和查询(对实时数据的存储,以及进一步供给 Online Service 查询)、实时数据的可视化。

3、现代实时数据流的必备要素

阿里云作为一家对外提供云服务的厂商,面对众多的应用场景、技术场景以及各种不同的技术方向,我们应该如何应对呢?以下,我将概述六个核心要素,这些是构建现代实时数据流系统所必需的:

3.1 大规模数据处理能力

这构成了将传统离线业务转变为实时操作的基础。

3.2 数据无障碍流动

为了实现业务的实时化处理,必须确保数据能够从 A 点顺利迁移到 B 点。这包括处理异构数据和跨地域数据的迁移。为了达到这一目的,我们需要有效地整合这些数据流。Apache Flink,作为一个生态丰富的开源项目,为我们在多个方面的开发与优化提供了坚实的基础。

3.3 数据处理连续性

在个人看来,Flink 主要覆盖两大领域。首先是数据领域,涉及到实时数据的处理与分析;其次是应用领域,主要关注于实时数据业务的处理。这里提到的“连续性” 更多地指向应用领域,寓意其功能相似于数据库,能够实现在线、始终在线的操作能力。这也是 Serverless 的根本产品形态要求和用户侧的最终诉求。

3.4 技术民主化

主要关注的是大众通常提到的应用性或门槛问题。由于在不同场景中,并不是每家公司的每个成员都能在特定技术领域有深入的了解和掌握,因此,该领域的用户对此有着强烈的需求。

3.5 实时数据可观测性

这里面的可观测性,除了基本的监控告警,还包含如何帮助用户深入理解数据及作业间的相互关系。

3.6 实时离线一体化

我们期望将实时与离线一体化的开发推广为一种标准范式,以便用户能够直接采用。在早期发展中, Flink 的崛起与流批一体理念是紧密相关联,我们希望在这个理念的引领下做出用户可快速上手的产品能力。

三、产品化实践

该部分围绕前面提到的六个必备要素展开,包括在某一部分具有怎样的能力,以及为什么要这样做。

1、大规模数据处理能力

这一部分主要讨论性能问题,因为性能直接关联到成本。阿里云 Flink 的性能优势主要源自两个方面的实践:

1.1 强劲的性能——SQL

相关内容将在后续分享中由陈婧敏老师详细介绍,敬请关注。

1.2 强劲的性能——Gemini

除了在 SQL 领域的应用外,我们亦在自研状态存储方面投入了大量精力。Gemini 是我们近期开发的状态后端系统,它受到了广泛关注(注:这个与 Google 最新发布的大模型无关,仅仅是名称相同)。作为我们自主研发的成果,其工作的位置相当于 Apache Flink 主要采用的 RocksDB。我们的云服务客户群体包括阿里巴巴集团内部,在使用 Gemini 时体现出了其强大的功能性,特别适合云计算环境。无论是在存储计算分离还是在多流场景下,Gemini 均能够提供性能优化。此外,其分层存储(tiered storage)功能也优化了状态管理。Gemini 还具备多种自适应参数设置,可以根据实际流量自动进行调整,从而免去了手动调节的需要。

上述两项关键实践的基础上,云上 Flink 的内核性能得到了显著提升。下图展示了 Flink 1.15 版本与云上对应版本在 Nexmark 测试下的性能比较。另外,相较之下,1.17 版本在此测试框架下的平均性能比开源 Flink 版本快约两倍。

2、数据无障碍流动

2.1 丰富的上下游数据连接器

连接器可分为四个主要类别:消息中间件、数据库、数据仓库以及数据湖。在我们的云产品中可以构建超过 30 种不同的上游及下游存储连接器。此外,平台还支持用户根据自身需求自定义连接器。生态的建设尤其关键,因为在构建这些连接器时,不仅需要深入理解上下游的事件,还需投入大量的人力和物力资源来进行优化和功能提升,通过我们的投入帮助用户省时省力的直接用起来。

2.2 Flink CDC 数据实时入湖入仓

这部分为我特别要强调的重点内容。这个项目作为阿里云 Flink 团队发起并主导的开源项目,通过单一的 SQL 实现在 Flink 作业中对变化数据进行分布式实时捕获,以便进一步在下游进行数据传输和计算处理。

Flink CDC 相较于其他的 CDC 框架以及过去的工具,有如下特点:

  • Flink CDC 能力更强大

从 CDC 的机制上来讲,它分为日志和查询两种。在最左侧的列中列举出了其相关的能力:

可以看到 Flink CDC 在各方面都能够较好地应对这些场景。另外,在分布式上,Flink CDC 嫁接在整个 Flink 的架构之上,因此,其分布式能力非常强。

  • Flink CDC 架构更加优雅

之前,当 CDC 过程完成后,如有计算需求,首先需要访问 Kafka,紧接着才是 Flink或其他相关操作。如今,我们可以直接读取数据进行 Flink 处理。在数据复用需求不高,但追求更优雅架构的场景下,这种方法提供了更简洁的流程和更少的组件。

  • Flink CDC 表结构变更迁移

除了基础的 Flink CDC 功能之外,我们还可以利用 Catalog 来实现元数据的自动发现与管理。在进行分库分表或整体库同步的数据同步过程中,能够自动识别并捕获到表结构的变动。如上图所示的案例,左侧展示的是使用 MySQL 的业务场景,中间通过一个Flink CDC 任务将数据同步至 Hologres(阿里云提供的一个数据仓库产品),这一过程实质上是从业务领域到数据领域的数据同步过程。在这个过程中,如果在 MySQL 中增加了一个列,该列也会自动地添加到 Hologres,并将相关数据同步过去。

  • Flink CDC 分库分表同步与整库同步

面对基于分布式数据库架构设计的大规模在线库表时,我们提供了两种功能:分库分表同步和整库同步

首先,我们介绍 CTAS 功能,其核心作用是实现分库分表的合并。这一功能特别适用于那些业务数据被分散储存在不同分片的数据库架构设计,现在我们需要将这些分散的数据合并到一张表中,以便进行统一的数据汇总、计算和深入分析的场景。CTAS 不仅能够轻松地将数据合并至阿里云的数据仓库中,还支持数据迁移至采用 Apache Paimon 湖格式的湖仓中。

接下来是 CDAS 功能,它的主要目标是实现整库同步。当有需求要将所有表的数据统一放入一个业务库中进行数据分析时,CDAS 提供了一个高效的解决方案。用户可以通过编写一个 SQL 语句,这个 SQL 不仅可以同步数据,还可以处理加表、schema 变更等操作,确保数据的全面同步。

3、数据处理连续性

鉴于 Flink 作业具备实时处理的能力,我们期望它能够持续稳定运行较长时间,以便能够支撑更多的业务流程运作在该框架上。

3.1 Flink CDC 全增量一体化+并发读取

Flink CDC,作为一种增量一体化框架,针对数据同步进行了巧妙设计。在全量数据同步阶段,它通过分块(chunk)的方法实现了数据的并行读取,从而加速了数据同步的基础阶段。这是因为同步一个数据库表需要先有历史数据的备份,而 Flink CDC 能够并行处理数据提取,显著提高了效率。进入增量同步阶段时,Flink CDC 能实现无锁一致性的平滑转换,而且这个切换过程无需停止当前作业,也不需要大量的 Binlog offset 进行操作,实现了一次性、无缝的切换。在处理增量数据时,由于它是基于单一序列(single series)读取 Binlog,这个机制保证了处理的连续性和高效性。目前,我们正研发一个实验性功能,虽然还未在云服务上推出,但该功能将使得 Slot 在不再需要时能够自动释放资源,从而在数据同步或集成的场景下显著提高资源利用效率,确保过程中无断点。

3.2 实时计算 Flink 版:同步作业动态加表

上述内容介绍了我们在云上实现方式。实际上,在进行整库同步的过程中,业务数据库会持续发展,不断创建新的表。尽管如此,我们仍然期望同步任务能够适应这种变化,动态地添加新表以实现整库的同步。

这一流程中,当前新表的添加需要通过创建检查点并重启作业来实现加载全部的新表数据,而旧数据则会继续从上次的同步点开始同步。未来,我们将允许作业在不重启的情况下运行,并且当业务数据库中产生新表时,能够确保数据的连续同步。

3.3 参数动态更新

要确保数据被连续处理,很多人会考虑调整参数,特别是在涉及性能、问题诊断及资源相关参数的修改时,他们关注的是如何迅速使这些调整生效,这也是 Serverless 的一个基础就是作业级别的动态调整能力。

在图中最左侧是重启作业更新,使用开源 Flink 的时候需要完全暂停重启作业。如果没有新的检查点,则还需要手动打作业快照。重启又涉及加载 Checkpoint 或者 Savepoint 的过程。而在右侧的阿里云 Flink 中,我们可以调整并发度和 Checkpoint 参数(间隔、超时时间等),通过点击“动态应用”按钮快速重启,实现参数的动态更新和资源的横向扩缩容。请参考下图以了解详细过程和结果。

左侧的红色区域展示了开源 Flink 参数调整的全过程,它涵盖了完整的重启流程。在阿里云 Flink 的应用场景中,在作业初始化阶段,即工作节点开始启动时,我们可以优先进行参数调整。而在蓝色区域中,我们致力于减少开销,并实现新旧作业的平滑切换,有效缩短整体的服务中断时间,并降低中断带来的成本。

对 100 个并发作业进行扩缩容操作的断流时间进行比较时,发现当扩容至 150 倍并发度时,若采用参数的动态更新,其耗时与原先相比将会有显著差异。我们后续计划推出对 SQL 进行动态更新的功能,这意味着,如果用户需要修改其 SQL 语句,而且这些修改与现有状态兼容,我们能够助力用户实现 SQL 逻辑的动态更新,这意味着阿里云 Flink 迈向更加贴合用户使用场景的 Serverless 能力。

3.4 失败快速恢复

前文提及的内容属于计划范畴内。至于计划之外的部分,也就是 Task 失败的切换场景,我们可以以更细致、更迅速的方式进行响应和恢复。

此过程受到语义限制,我们必须在至少一次 (At-least-once) 语义的条件下实施,采取快速失败恢复机制,从而缩短恢复时间。

3.5 动态规则的复杂事件处理 (CEP)

这项功能在社区中早已出现,被称为复杂事件处理(Complex Event Processing, CEP)。设想一下,如果我们拥有一串流数据,并希望依据特定模式进行匹配:比如,首先发生 A 事件,在接下来的 10 秒内又发生 B 事件,那么一旦在数据流中识别出这一模式,就可以将其视为一个警报或事件。在开源实现中,CEP 基本上是静态的,即其匹配的模式是固定的,并编码于程序之中。然而,在实际业务流程中,运营或策略人员可能会调整规则,每次更改模式时,都需数据人员进行代码修改、上线申请等繁复过程。如果能将这些规则外置到如 MySQL 这样的存储系统中,并能够动态地应用这些规则变化在线上系统中,只要系统资源充足,在不太复杂的情况下,这种调整便可以实时生效。这不仅可以解放数据平台人员,让他们专注于业务需求,还可以仅通过监测资源使用情况来实现。当然,在面对特别复杂的情况时,仍然可以通过调整资源,例如改变并发度,来进行处理。总之,在资源充足的条件下,CEP 的动态调整是可行的,而阿里云 Flink 就针对这个场景推出了动态 CEP 的能力。

以某电梯制造商的案例为例,该公司利用了一系列实时规则,为其物联网传感器数据配备了 CEP 规则,以匹配电梯是否存在故障的场景。在这一实施方案中,大量规则被存放在 RDS 数据库中,并通过一个后台应用进行规则的增删改查,进而通过一个前端界面供策略人员使用。所有规则的增加、删除、修改和查询皆可在实时的 Flink CEP 作业中得到动态实施。所有的传感器数据通过 Kafka 流式处理加以同步。Flink CEP 的作业会持续与 Kafka 的数据流摄取,一旦检测到新的规则,就会采用新规则进行匹配。匹配成功的结果会被记录在结果库中。整个过程能够最大限度的使作业保持持续运行。

后续内容请关注Flink的产品化思考与实践【下篇】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/775056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java调用jacob进行文件转换ppt转pdf或者png

java调用jacob进行文件转换ppt转pdf或者png 前情提要 最近项目上,遇到一个复杂的ppt,最终要求是要将ppt每一页转成图片原本这个是不难,网上一搜一大堆案例,外加我本身也比较精通aspose,那还不是分分钟搞定。结果就是…

Django 中间件

【一】Django框架之生命周期流程图 【二】介绍 【1】概述 Django 中的中间件(Middleware)是一个轻量级、底层的“插件”系统,用来全局地改变 Django 的输入或输出。每个中间件组件负责处理特定的全局任务,例如处理会话、处理跨站…

【有限状态机】- FSM详细讲解 【附Autoware有限状态机模型代码讲解】

参考博客: (1)FSM(有限状态机) (2)关于有限状态机(FSM)的一些思考 (3)状态设计模式 1 状态机简介 有限状态机FSM:有限个状态以及在这些状态之间的转移和动作…

2024年最新最全Vue3开源后台管理系统复盘总结

在现代前端开发中,搭建一个高效、灵活、易用的后台管理系统并不容易。然而,Vue3 的出现为我们提供了一个备受瞩目的选择。作为一个现代化的前端框架,Vue3 具有众多优点,能够帮助开发者快速搭建企业级中后台产品原型。 今天&#…

iphoneX系统的参数

1. 2. 3. 4. 5.相关的网址信息 Apple iPhone X 規格、价格和评论 | Kalvo Apple iPhone X 規格、价格和评论 | Kalvo

UOS、Linux下的redis的详细部署流程(适用于内网)

提示:适用于Linux以及UOS等内外网系统服务器部署。 文章目录 一.上传离线包二.部署基本环境三.解压并安装redis四.后台运行redis五.uos系统可能遇到的问题六.总结 一.上传离线包 1.自己去Redis官网下载适配自己部署系统的redis安装包。 2.通过文件传输工具&#xf…

Rust使用原始字符串字面量实现Regex双引号嵌套双引号正则匹配

rust使用Regex实现正则匹配的时候,如果想实现匹配双引号,就需要使用原始字符串字面量,不然无法使用双引号嵌套的。r#"..."# 就表示原始字符串字面量。 比如使用双引号匹配: use regex::Regex;fn main() {println!(&qu…

快速幂算法在Java中的应用

引言: 在计算机科学和算法领域中,快速幂算法是一种用于高效计算幂运算的技术。在实际编程中,特别是在处理大数幂运算时,快速幂算法能够显著提高计算效率。本文将介绍如何在Java中实现快速幂算法,并给出一些示例代码和应…

151 shell编程,正则表达式,在C语言中如何使用正则表达式

零,坑点记录:bash 和 dash 的区别,导致的坑点 查看当前用的shell 是啥,用的是/bin/bash hunandedehunandede-virtual-machine:~$ echo $SHELL /bin/bash 当shell 脚本运行的时候(后面会学到方法,这里是最…

全局UI方法-弹窗一警告弹窗(AlertDialog)

1、描述 显示警告弹窗组件,可设置文本内容与响应回调。 2、属性 名称参数类型参数描述showAlertDialogParamWithConfirm | AlertDialogParamWithButtons定义并显示AlertDialog组件。 2.1、AlertDialogParamWithConfirm对象说明: 参数名称参数类型必填…

『Apisix安全篇』探索Apache APISIX身份认证插件:从基础到实战

🚀『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】 📣读完这篇文章里你能收获到 🛠️ 了解APISIX身份认证的重要性和基本概念,以及如何在微服务架构中实施API安全。🔑 学习如何使…

FreeRTOS(三)

第二部分 事件组 一、事件组的简介 1、事件 事件是一种实现任务间通信的机制,主要用于实现多任务间的同步,但事件通信只能是事件类型的通信,无数据传输。其实事件组的本质就是一个整数(16/32位)。可以是一个事件发生唤醒一个任务&#xff…

ClickHouse初体验

1.clickHouse是啥? ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告 2.clickHouse的特点 2.1列式存储 对于列的聚合&…

城市内涝排水新模式:慧天[HTWATER]

慧天[HTWATER]软件:慧天排水数字化分析平台针对城市排水系统基础设施数据管理的需求,以及水文、水力及水质模拟对数据的需求,实现了以数据库方式对相应数据的存储。可以对分流制排水系统及合流制排水系统进行地表水文、管网水力、水质过程的模…

Transformers 直观解释——不仅是如何工作,而且为什么工作得这么好

输入序列如何到达Attention模块 注意力模块存在于编码器堆栈中的每个编码器中,以及解码器堆栈中的每个解码器中。我们将首先放大编码器的注意力。 Attention in the Encoder: 举个例子,假设我们正在研究一个英语到西班牙语的翻译问题&…

【旅游】泉州攻略v1.0.0

一、泉州古城 泉州市距离深圳大约520公里,从深圳北站出发,高铁大约3小时30分。 到达泉州西站后,往东南方向大约8公里,就可以到达主要的旅游景点泉州古城。 古城很适合使用一天玩耍,核心路线如下: 一路的景…

C++ STL教程

C STL教程 文章目录 C STL教程1.1 std::vector1.1.1vector的定义1.1.2vector容器的初始化1.1.3vector容器内元素的访问和修改1.1.4vector中的常用函数 1.2 std::string1.2.1string的定义1.2.2string的初始化1.2.3string中元素的访问和修改1.2.4string中连接字符串1.2.5string中…

AtCoder Beginner Contest 337 A - E

A - Scoreboard 大意 高桥队和青木队进行了场比赛&#xff0c;给出每场比赛中高桥队和青木队的积分&#xff0c;问最后谁总分更高或平局。 思路 统计总分比较即可。 代码 #include<iostream> using namespace std; int main(){int n, a0, b0;cin >> n;while(…

介绍部署esxi8.0产品的方式

什么是esxi esxi的中文叫裸机虚拟机管理器 ESXi是由VMware公司开发的一种裸机虚拟机管理器&#xff0c;全称为VMware ESXi。 ESXi是一种虚拟化技术&#xff0c;专门设计用于在物理服务器上运行虚拟机&#xff0c;它的主要特点是能够最大限度地降低硬件配置要求并简化部署过程…

vcf文件可以用excel打开吗?四种解决方案

vcf文件可以用excel打开吗&#xff1f; 当然可以。 一、VCF文件简介 VCF&#xff08;vCard&#xff09;文件是一种用于存储联系人信息的文件格式。它通常包含姓名、电话号码、电子邮件地址、地址等详细信息。VCF文件在多种设备和操作系统中广泛使用&#xff0c;特别是在电子邮…