Apache flink Flink Table API使用什么后端?它需要任何关系数据库吗?

Apache flink Flink Table API使用什么后端?它需要任何关系数据库吗?,apache-flink,flink-streaming,flink-sql,flink-table-api,Apache Flink,Flink Streaming,Flink Sql,Flink Table Api,我对Flink还比较陌生,并试图了解可以使用流API/表API的适当用例。作为努力理解的一部分 与流API一样,表API是否具有选择其可以使用的状态后端类型的灵活性 表API的所有可用后端是什么,它是否需要像我的SQL这样的外部数据存储?或者任何其他数据存储 简而言之,试图了解TableAPI使用的后端工作。就其本身而言,Flink可能不是一个好的长期持久存储。它更像一个处理系统。您需要在MySQL/Kafka/Cassandra/S3/etc中拥有长期持久状态 尽管如此,有些计算需要内部状态簿

我对Flink还比较陌生,并试图了解可以使用流API/表API的适当用例。作为努力理解的一部分

  • 与流API一样,表API是否具有选择其可以使用的状态后端类型的灵活性
  • 表API的所有可用后端是什么,它是否需要像我的SQL这样的外部数据存储?或者任何其他数据存储

  • 简而言之,试图了解TableAPI使用的后端工作。

    就其本身而言,Flink可能不是一个好的长期持久存储。它更像一个处理系统。您需要在MySQL/Kafka/Cassandra/S3/etc中拥有长期持久状态

    尽管如此,有些计算需要内部状态簿记:当你这样做的时候

    SELECT word, count(*) FROM words GROUP BY word
    
    每个字使用某种整数瞬态。现在,您的工作将无法避免机器故障并重新启动。这就是
    状态后端存在的原因。它可以保存在计算中的位置(例如卡夫卡偏移量)以及计数的值

    因此,要回答您的问题:

  • 是的。内部Blink查询计划器使用相同的代码(为执行计划规则的不同应用而保存)。在流式处理环境中,或者在非常昂贵的批处理作业中(您可能希望为任务管理器使用便宜的AWS Spot实例,并且您对实例抢占非常健壮),这对我来说确实更有意义。也许能帮你做出选择

  • 状态后端在我提供的链接中。现在,您可能希望从数据当前所在的位置读取数据,并在计算后进行读取。支持大量数据存储。对于非常大的盐粒,区别在于:一些可以流式传输数据:;有些不能:。例如:MySQL JDBC数据流连接器只有一个接收器,而在表API中它可以既是接收器又是源



  • 作为旁注:状态后端确实是可查询的;但是IMHO更适合于调试目的。

    BenoitParis,从您的回答中,我了解到TableAPI使用了任何可用的状态后端(InMem、FS、RocksDB)。因此,存储转换状态不需要SQL/ES/任何其他外部存储。我可以假设TableAPI等同于流式API w.r.t状态存储吗?说了这两种方法会有一点性能差异。@ardhani我可以假设TableAPI等同于流式API w.r.t状态存储吗?->是的,我已经说过,两个b/w会有一点性能差异。->请参阅我的答案