1

对于使用有状态函数的一些建议,我将不胜感激。我们目前正在使用 Flink,我们从多个 kafka 流中消费、聚合、运行计算,然后输出到新的流。问题是计算元素是由不同的团队提供的,他们选择的语言是 Python。我们希望为他们提供独立于流媒体元素开发和更新其组件的能力。最初,我们只是将他们的代码移植到 Java。有状态函数似乎在这里提供了一种替代方案,我们将保留我们的一些功能,并将模型作为 Python 中的有状态函数托管。但是,我想知道,与仅将计算模块托管在自己的管道上并在 Flink 中使用 AsyncFunction 与之交互相比,这是否有任何优势。

4

1 回答 1

2

我想首先指出 Stateful Functions 确实有一个 DataStream 互操作模块。这意味着您可以使用 StateFun 来处理管道的 Python 函数,而无需重写整个 Flink Job。

也就是说,Stateful Functions 使用 AsyncIO 并自己动手带来了哪些优势?

  1. 自动处理连接、批处理、背压和重试。即使您使用的是单个 python 函数并且没有状态,Stateful Functions 也已经过大量优化,以尽可能快速和高效地通过社区的持续改进,您可以免费使用。StateFun 具有比 AsyncIO 更复杂的反压和重试机制,您需要自行重新开发。

  2. 更高级别的 API。StateFuns Python SDK(和其他)提供了定义明确的类型化 API,易于开发。您正在与之合作的另一个团队只需要几行胶水代码即可与 StateFun 集成,而该项目将为您处理传输协议。

  3. 状态!正如项目名称所暗示的,有状态的函数是有状态的。Python 函数可以维护状态,您将获得开箱即用的 Flink 的完全一次保证。

于 2021-07-23T15:46:02.370 回答