【问题标题】:Flink Stateful Functions with an existing Flink applicationFlink Stateful Functions 与现有 Flink 应用程序
【发布时间】:2021-09-30 11:26:54
【问题描述】:

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

【问题讨论】:

    标签: apache-flink flink-streaming flink-statefun


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 感谢您的详细回答。我认为我们会提前进行调查,所以它似乎提供了很多我们将不得不写的开箱即用的内容
    • 嗨,Seth,我已经开始连接我们的应用程序,但只能找到使用 Kafka 作为入口的示例。文档建议也可以使用 http,但我找不到任何示例,您能否指出正确的方向?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2022-06-12
    相关资源
    最近更新 更多