写点什么

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:001948

评论

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

架构师训练营第01周——UML练习

李伟

极客大学架构师训练营

食堂就餐卡系统设计

Acker飏

极客大学架构师训练营

什么叫架构师

平淡人生

极客大学架构师训练营

聊聊架构师

Jerry Tse

随笔杂谈 极客大学架构师训练营 作业

我不想做一个架构师

彭灵俊

极客大学架构师训练营

食堂就餐卡系统架构设计

~就这样~

第一节课的总结

王锟

实例学习绘画UML图

张瑞浩

编译运行Zookeeper源码

CoderLi

Java zookeeper 程序员 源码分析 后端

作业一:食堂就餐卡系统设计

独孤魂

极客大学架构师训练营

架构师训练营 Week 01 学习总结

Kun

极客大学架构师训练营

第一次课作业

lai

作业2-学习心得

蒜泥精英

架构师训练营-学习总结

~就这样~

架构师训练营第0期-第1周-作业二

极客大学架构师训练营

作业1:食堂就餐卡系统设计(UML)

蒜泥精英

架构文档编写

清风明月

就餐卡系统架构设计

祝好

架构师训练营第0期-第1周-作业一

极客大学架构师训练营

食堂就餐卡系统设计(第一周)

关于架构师这个角色的感悟

祝好

架构师训练营-食堂就餐卡系统设计

彭灵俊

极客大学架构师训练营

【第一周】学习总结——架构方法、软件建模与设计文档

三尾鱼

极客大学架构师训练营

就餐卡系统(时间太紧张,阅读了很多,我转载的这篇)

王锟

第一课 架构师的自我修养

Geek_bobo

就餐卡设计文档

chengjing

食堂就餐卡系统架构视图

梅子黄时雨

极客大学架构师训练营

食堂就餐卡系统设计

八两

第 1 周食堂就餐卡系统设计

陆不得

就餐卡系统设计

平淡人生

极客大学架构师训练营

Lesson 1 架构师如何做架构 心得笔记

edd

编程好习惯 极客大学架构师训练营 架构总结

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