10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

Apache Flink 社区发布的 Stateful Functions 2.2.0 是什么?

  • 2020-11-26
  • 本文字数:2907 字

    阅读完需:约 10 分钟

Apache Flink 社区发布的 Stateful Functions 2.2.0 是什么?

本文最初发表在 Apache Flink 官博,经原作者授权,InfoQ 中文站翻译并分享。


Apache Flink 开源的 StatefulSet Functions 可以极大降低构建和编排分布式有状态应用程序的复杂性,集成了 Apache Flink 和函数即服务(Function-as-a-Service,FaaS)的流处理优点,为下一代事件驱动架构提供了强大的抽象能力。日前,StatefulSet Functions 2.2.0 现已发布。


Apache Flink 社区很高兴宣布 Stateful Functions 2.2.0 的发布!这个版本引入了扩展 SDK 的主要功能,例如 Python SDK 中对异步函数的支持、新的持久化构造,以及允许在 Flink DataStream 作业中嵌入 StateFun 函数的新 SDK。此外,我们还包括一些重要的更改,这些更改提高了常见工作负载的开箱即用稳定性,并提高了操作目的的可观察性。


自上个版本发布以来,我们也看到了新的第三方 SDK 正在为 StateFun 开发。虽然它们并不是发布版本的一部分,但是看到这些由社区驱动的新增功能,我们还是很高兴的!我们在下面的公告中,强调了这些努力。


二进制发行版和源码产品现在就可以在 Flink 网站的更新下载页面上获得,最新的 Python SDK 发行版可以在 PyPI 上获得。有关更多详细信息,请查阅完整的版本变更日志更新文档。我们鼓励你下载这一版本,并通过 Flink 邮件列表JIRA 与社区分享你的反馈意见。

新功能

Python SDK 中的异步函数


此版本通过在 Python SDK 中引入新的处理程序,可以将异步 Python 函数注册为有状态函数:AsyncRequestReplyHandler 这允许使用 Python Web 框架提供 StateFun 函数,这些框架本身就支持本地异步 IO(例如 aiohttp):


from statefun import StatefulFunctionsfrom statefun import AsyncRequestReplyHandler

functions = StatefulFunctions()

@functions.bind("example/greeter")async def greeter(context, message): html = await fetch(session, 'http://....') context.pack_and_reply(SomeProtobufMessage(html))

# expose this handler via an async web frameworkhandler = AsyncRequestReplyHandler(function
复制代码

有关更多详细信息,请参阅有关公开 Python 函数的文档。

Flink DataStream 集成 SDK


使用这个 SDK,你可以将使用 Flink DataStream API 或更高级别的库(如 Table API、CEP 等等,基本上是任何可以使用或生成 DataStream 的东西)与 StateFul Functions 提供的编程结构结合起来,如下所示:


StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

DataStream<RoutableMessage> namesIngress = ...

StatefulFunctionEgressStreams egresses = StatefulFunctionDataStreamBuilder.builder("example") .withDataStreamAsIngress(namesIngress) .withRequestReplyRemoteFunction( RequestReplyFunctionBuilder.requestReplyFunctionBuilder( REMOTE_GREET, URI.create("http://...")) .withPersistedState("seen_count") .withFunctionProvider(GREET, unused -> new MyFunction()) .withEgressId(GREETINGS) .build(env);

DataStream<String> responsesEgress = getDataStreamForEgressId(GREETINGS
复制代码


来自 DataStream 入口的事件被路由到绑定函数,发送到出口的事件被捕获为 DataStream 出口。这为构建复杂的流媒体应用提供了可能性。

动态状态注册的构造


在这个版本之前,Java SDK 中的持久状态构造,如 PersistedValuePersistedTable 等,必须在一个有状态函数的类中即时定义。在某些场景中,函数所需的状态是事先未知的,并且只能在运行时动态注册(例如,在调用函数时)。


这个版本通过提供新的 PersistedStateRegistry 构造实现了这一点:


public class MyFunction implements StatefulFunction {    @Persisted    private final PersistedStateRegistry registry = new PersistedStateRegistry();    private final PersistedValue<String> myValue;

public void invoke(Context context, Object input) { if (myValue == null) { myValue = registry.registerValue(PersistedValue.of("my-value", String.class)); } ... }}
复制代码

改进

远程函数通信稳定性


在观察到常见工作负载之后,我们调整了一些与远程函数通信的配置,以获得更好的开箱即用连接稳定性。这包括以下内容:


  • 底层连接池是为低延迟、高吞吐量的工作负载而调整的。这使得 StateFun 能够更积极地重用现有的连接,从而避免为每个请求重新建立连接。


  • 一旦未完成的请求总数达到每个 JVM 的阈值(statefun.async.max-per-task),StateFun 就会施加背压,但观察典型的工作负载,我们发现默认值设置得过高了。在这个版本中,为提高稳定性和资源消耗,我们降低了默认值,以应对响应缓慢的远程函数。

StateFun 应用程序的操作可观察性


这个版本的一个主要目标是采取必要的步骤来支持远程函数的自动扩展。为此,我们已经公开了几个与远程函数的工作负载以及由此产生的函数调度器施加的背压有关的指标。这包括以下内容:


  • 每个函数类型调用持续时间/延迟直方图。

  • 每个函数类型的积压规模。

  • 每个 JVM(StateFun 工作器)和每个函数类型的正在执行的调用函数。


度量标准及其描述的完整列表可以在这里找到。

对远程连接生命周期的细粒度控制


在这个版本中,可以通过远程函数为 HTTP 请求的总持续时间和单个读写 IO 才做设置单独的超时。你可以在定义这些超时值的函数规范中找到相应的字段名称。

第三方 SDK


自从上一个版本发布以来,我们已经看到在 StateFun 的远程函数 HTTP 请求-应答协议之上实现了针对不同语言的新的第三方 SDK,包括 GoRust 实现。虽然这些 SDK 没有得到 Apache Flink PMC 的认可或维护,目前也不是当前版本的一部分,但看到这些新功能的添加,证明了框架的可扩展性是非常棒的。


出于这一原因,我们在文档中添加了一个新页面,列出了社区所了解的第三方 SDK。

重要补丁说明


下面是面向用户的界面和配置更改、依赖关系版本升级或删除受支持版本的列表,当你将 StateFun 应用程序升级到此版本时,需要注意的重要事项:


  • [FLINK-18812] StateFun 2.2 中的 Flink 版本已升级为 1.11.1。

  • [FLINK-19203] 将 Scala 版本升级到 2.12,并放弃了对 2.11 的支持。

  • [FLINK-19190] 所有现有度量名称都采用驼峰式命名法(camel-cased),而不是蛇形命名法(snake-cased),以符合 Flink 度量命名约定。如果你依赖于之前的度量标准,这将会破坏现有的部署

  • [FLINK-19192] 远程函数 HTTP 请求的连接池大小已增加到 1024,其中失效 TTL 为 1 分钟。

  • [FLINK-19191] 每个 JVM(StateFun 工作器)的默认最大异步操作数已减少到 1024 个。

发行说明


如果你计划将安装程序升级到 Stateful Functions 2.2.0,请查看发行说明以获取更改和新功能的详细列表。


作者介绍:


Tzu-Li(Gordon)Tai,Apache Flink 代码提交者、PMC 会员,Ververica 软件工程师;Sebastian Riedel,Apache Flink 原创者,Ververica 软件工程师。


原文链接:

https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315522&version=12348350

2020-11-26 07:002276

评论

发布
暂无评论
发现更多内容

火山引擎DataTester“智能发布”:覆盖产品研发、测试、上线全流程,一站式智能管理A/B实验

字节跳动数据平台

大数据 AB testing实战 企业号 2 月 PK 榜

优化数仓业务视图:过滤条件传递

华为云开发者联盟

数据库 后端 华为云 企业号 2 月 PK 榜 华为云开发者联盟

前端技术培训学习哪个机构好?

小谷哥

关于飞桨PaddlePaddle

飞桨PaddlePaddle

paddle 开源 飞桨

YOLOv8来啦!YOLO内卷期模型怎么选?9+款AI硬件如何快速部署?深度解析

飞桨PaddlePaddle

paddle yolo 飞桨

如何用一套代码运行跨多操作系统应用

HarmonyOS开发者

HarmonyOS

前端线下面授培训机构的选择

小谷哥

君子动手不动口,FinClip 喊你做超级体验官啦!

FinClip

下一朵云,会是谁

ToB行业头条

如何通俗理解信创国产化是什么意思?有哪些系统?有什么意义?

行云管家

信创 堡垒机 国产操作系统

ONES 通过国内最权威信息安全等级认证——等保三级

万事ONES

4-业务架构师眼中的需求是什么?

涛哥 数字产品和业务架构

业务架构 业务需求

怎么正确使用 NPS ?用对了才事半功倍

鼎道智联

运营 用户体验 用户推荐

关于Zebec生态的改进提案,即将上线的 Nautilus 链

西柚子

利用混沌工程提高微服务的弹性

NGINX开源社区

nginx 微服务架构 性能 企业号 2 月 PK 榜

巧用Maya轴心操作小技巧,工作事半功倍!

3DCAT实时渲染

Maya,渲染 Autodesk Maya

干货分享 | UE游戏鼠标双击判定

3DCAT实时渲染

游戏开发 虚幻引擎 ue 游戏开发引擎

NFT铸造系统模式开发定制

开发微hkkf5566

大数据培训学习怎么入门

小谷哥

落地DevOps的三要素

老张

DevOps 软件工程 研发效能 交付质量

换个角度理解计算机网络,搭建计网知识框架

Java全栈架构师

程序员 面试 计算机网络 架构师 tcpip

深圳双机热备软件厂商哪家好?咨询电话多少?

行云管家

高可用 系统故障 双机热备

尚硅谷发布九章云台项目视频

小谷哥

关于Zebec生态的改进提案,以及即将上线的 Nautilus 链

股市老人

云端智创 | 聚焦云剪辑核心,一文详述智能生产全链路

阿里云CloudImagine

云计算 视频云 智能媒体生产

共攀元宇宙新高峰,2月14日沈阳元宇宙产业峰会邀您携手领跑2023

华为云开发者联盟

华为云 元宇宙 企业号 2 月 PK 榜 华为云开发者联盟 VR开发

BI 仪表板/数据可视化大屏最全面的设计流程梳理

搞大屏的小北

需求分析 业务场景分析 BI 分析工具 可视化数据 BI 报表

Flutter 生成运行小程序的混合App开发实践

FinFish

flutter 移动开发 小程序技术 混合app

高性能图像处理的新利器——FlyCV

飞桨PaddlePaddle

paddle 飞桨 flycv

舞台LED显示屏使用禁忌

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

Apache Flink 社区发布的 Stateful Functions 2.2.0 是什么?_AI&大模型_Tzu-Li(Gordon)Tai_InfoQ精选文章