应用程序构建块
Last updated
Last updated
有状态函数提供了用于构建事件驱动应用程序的框架。在这里,我们解释了有状态功能体系结构的重要方面。
有状态函数应用程序正好位于事件驱动的空间中,因此最自然的起点是将事件放入系统中。
在有状态功能中,将记录提取到系统中的组件称为事件入口。这可以是任何东西,从Kafka Topic到消息队列,再到http请求——任何可以将数据输入系统并触发初始函数开始计算的东西。
该图的核心是同名的有状态函数。
将这些作为您的服务的构建块。它们可以任意地相互发送消息,这是该框架脱离传统的流处理视图的一种方式。这些函数可以以任意的、可能是循环的、甚至是双向的方式彼此通信,而不是建立静态数据流DAG。
如果你熟悉Actor编程,那么它在组件之间动态消息传递的能力上确实具有某些相似之处。但是,存在许多显著差异。
首先是所有功能都具有本地嵌入状态,称为持久状态。
Apache Flink的核心优势之一是其提供容错本地状态的能力。在函数内部时,在执行一些计算时,你始终在局部变量中使用局部状态。
对于状态和消息传递,有状态函数仍然能够提供精确的一次性保证,满足用户对现代数据处理框架的期望。
在发生故障的情况下,整个状态(持久状态和消息)都将回滚以模拟完全无故障的执行。
无需数据库即可提供这些保证,有状态函数利用了Apache Flink经过验证的快照机制。
最后,应用程序可以通过事件出口将数据输出到外部系统。
当然,函数可以执行任意计算,并且可以执行自己喜欢的任何事情,包括进行RPC调用和连接到其他系统。通过使用事件出口,应用程序可以利用在Apache Flink连接器生态系统之上构建的预构建集成。