apache-flink - Flink Stateful Functions 与现有 Flink 应用程序

标签 apache-flink flink-streaming flink-statefun

我希望获得有关使用有状态函数的一些建议。 我们目前使用 Flink,从多个 kafka 流中消费、聚合、运行计算,然后输出到新流。 问题是计算元素是由不同的团队提供的,他们选择的语言是 Python。我们希望为他们提供独立于流元素开发和更新组件的能力。 最初,我们只是将他们的代码移植到 Java。 有状态函数似乎在这里提供了一种替代方案,我们可以按原样保留一些功能,并将模型托管为 Python 中的有状态函数。然而,我想知道,与仅将计算模块托管在自己的管道上并使用 Flink 中的 AsyncFunction 与其交互相比,这是否有任何优势。 如果我们要转向有状态函数,我不禁会觉得我们在不使用其功能的情况下增加了复杂性,但我可能会错过一些关于速度和弹性的重要考虑因素?

最佳答案

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

也就是说,与使用 AsyncIO 和自己动手相比,有状态函数有哪些优势?

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

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

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

关于apache-flink - Flink Stateful Functions 与现有 Flink 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68497413/

相关文章:

apache-flink - 在 Flink Stateful 功能模块中存储数据库或第三方连接

apache-flink - Apache Flink 有状态函数 python 与 java 性能对比

Apache Flink 中的有状态函数

apache-flink - 是否可以为 flink 中的单个管道定义 cpu 和内存限制?

java - Apache Flink(集群中的标准输出错误)

sql - Apache Calcite 是否提供添加自定义子句或语句的方法?

java - Apache Flink CEP如何根据事件值传入时间窗口?

apache-flink - 弗林克 : overlapping reading

apache-flink - 如何将 Apache Flink 与查找数据一起使用?

java - Flink CEP Pattern 与开始作业后的第一个事件不匹配,并且始终与之前的事件集匹配