Flink状态函数与现有Flink应用程序



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

我想首先指出有状态函数确实有一个数据流互操作模块。这意味着你可以使用statfun来处理管道中的Python函数,而无需重写整个Flink Job。

也就是说,有状态函数比使用AsyncIO和自己做有什么优势?

  1. 自动处理连接、批处理、回压和重试。即使您使用的是单个python函数而没有状态,有状态函数也已经经过了大量优化,通过社区的持续改进,尽可能快速高效,您可以免费利用这些改进。与AsyncIO相比,StateFun有更复杂的回压和重试机制,你需要自己重新开发。

  2. 高级api。statfuns Python SDK(和其他SDK)提供了定义良好的类型化api,易于开发。与您合作的另一个团队将只需要几行粘合代码来集成StateFun,而项目将为您处理传输协议。

  3. 状态!正如项目名称所暗示的那样,有状态函数是有状态的。Python函数可以维护状态,你将得到Flink的一次保证。

相关内容

  • 没有找到相关文章

最新更新