我是 flink 新手,我们的用例涉及无状态计算。 读取事件、处理事件并保存到数据库中。但 Flink 文档从未谈到无状态处理。用于查找无状态示例或文档的任何示例存储库。
最后,对于这个用例,哪种 Flink 模型适用?流应用程序或事件驱动的应用程序。
最佳答案
文档中非常强调有状态流处理,因为社区为创建了一个高性能、容错的流处理器而感到自豪,即使在大规模操作有状态管道时,该处理器也能提供一次性保证。但你当然可以在不使用状态的情况下充分利用 Flink。
但是,真正的无状态应用程序很少见。即使应用程序没有执行任何明显有状态的操作(例如窗口或模式匹配),状态也需要提供一次性的、容错的语义。 Flink 可以确保每个传入事件在接收器中仅保存一次,但这样做需要 Flink 的源和接收器保持状态,并且必须对该状态进行检查点(并在故障后恢复)。这一切都是透明处理的,除了您需要启用和配置检查点(假设您关心一次性保证)。
Flink 文档包含关于 Data Pipelines and ETL 的教程其中包括一些无状态的示例和练习 ( https://github.com/apache/flink-training/tree/master/ride-cleansing )。
Flink 具有三个主要 API:
DataStream API:这个低级 API 功能非常强大,但此处列出的其他 API 对于某些用例具有强大的优势。 tutorials in the docs为一个良好的起点。另请参阅https://training.ververica.com/ .
Flink SQL 和 Table API:这特别适合 ETL 和分析工作负载。 https://github.com/ververica/sql-training是一个很好的起点。
有状态函数 API:此 API 提供了一组不同的抽象,以及支持各种 SDK 的云原生、与语言无关的运行时。对于事件驱动的应用程序来说,这是一个不错的选择。 https://flink.apache.org/stateful-functions.html和 https://github.com/ververica/flink-statefun-workshop是很好的起点。
关于apache-flink - Flink 用于无状态处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65213009/