我对Flink相当陌生,并试图理解可以使用Stream API/Table API的适当用例。作为试图理解的一部分
- 与Stream API一样,Table API是否具有选择其可以使用的状态后端类型的灵活性
- 表API的所有可用后端是什么?它是否需要像My SQL这样的外部数据存储?或任何其他数据存储
简言之,试图了解Table API使用的后台工作。
就其本身而言,Flink可能不是一个好的长期持久存储。它更像是一个处理系统。您将希望在MySQL/Kafka/Casandra/S3/等中保持长期持久状态。
话虽如此,有些计算需要内部状态记账:当你进行时
SELECT word, count(*) FROM words GROUP BY word
每个单词使用某种整数瞬态。现在,你的工作不会安全,不会因机器故障而重新启动。这就是state backend
存在的原因。它可以保存它在计算中的位置(例如Kafka偏移(以及计数的值。
因此,为了回答您的问题:
确实如此。内部Blink查询计划器使用相同的代码(除了执行计划规则的不同应用程序(。在流媒体环境或非常昂贵的批处理作业中,这对我来说确实更有意义(你可能想为任务管理器使用廉价的AWS Spot实例,并且你对实例抢占能力很强(。此页面可能会帮助您做出选择。
状态后端在我提供的链接中。现在,您可能想从数据当前所在的位置读取数据,并在计算后进行读取。大量的数据存储被支持。对于非常大的一粒盐,区别在于:有些可以流式传输数据:数据流连接器;有些不能:Table/SQL连接器。例如:一个MySQL JDBC数据流连接器将只有一个接收器,而它可以是表API中的一个接收器和一个源。
附带说明:状态后端确实是可查询的;但是IMHO更适合用于调试目的。