各位,Flink 的离线计算的数据是怎么存放的?是存在 HDFS(或Hive)上的吗?[阿里云实时计算 Flink版]

各位,Flink 的离线计算的数据是怎么存放的?是存在 HDFS(或Hive)上的吗?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
5 条回复 A 作者 M 管理员
  1. 先将离线数据预先加载到sink端,或者将数据保存到Flink State中去。 如果离线数据的计算结果在mysql中,那么可以使用类似维表的方式直接进行Stream操作 加载离线写入State

  2. Flink 是一个针对流数据和批数据的分布式处理引擎。它主要是由 Java 代码实现。目前主要还是依靠开源社区的贡献而发展。 对 Flink 而言,其所要处理的主要场景就是流数据。Flink 的前身是柏林理工大学一个研究性项目, 在 2014 被 Apache 孵化器所接受,然后迅速地成为了 ASF(Apache Software Foundation)的顶级项目之一。 Flink使用的是Chandy Lamport算法的一个变种,定期生成正在运行的流拓扑的状态快照,并将这些快照存储到持久存储中(例如:存储到HDFS或内存中文件系统)。检查点的存储频率是可配置的。 做离线开发的时候数据存储在hdfs或者hive,不管用什么组件,数据源都是hive,然后定时执行脚本,跑离线任务。 实时数仓可以理解为数据都存储在kafka,Flink消费kafka的数据然后进行逻辑处理,然后再下发到kafka,这么延迟是秒或者分钟级别的,对于不同的业务效果更好,更实时。 在做消息报表系统时,采用离线计算的方式,如果采用spark作为计算引擎,原始数据会存放在HDFS中,聚合数据存放在Solr、Hbase和Mysql中。

  3. Flink在做大数据的离线计算时,当然是把所有数据读到内存中的。至于开销,因为它是分布式的,理想状况下,开销是单台机器的开销,和普通的单机数据处理开销是一样的。

  4. 无论何种 StateBackend,Operator State 在运行期间全部存储在 TM 的内存中。Checkpoint 时,MemoryStateBackend 会将状态数据保存到 JM 的内存中。其他 StateBackend 会将状态数据保存到 hdfs。对应表格:

    StateBackend类型 运行过程中存储位置 Checkpoint存储位置 适用场景 memory TM 内存中 JM 内存中 调试(生产环境严禁使用) filesystem TM 内存中 hdfs 生产环境 Rocksdb TM 内存中 hdfs 生产环境 KeyedState 的存储表格如下所示:

    StateBackend类型 运行过程中存储位置 Checkpoint存储位置 适用场景 memory TM 内存中 JM 内存中 调试(生产环境严禁使用) filesystem TM 内存中 hdfs 状态较小的场景,性能极高 Rocksdb TM 本地的 RocksDB 中 hdfs 大状态场景

  5. ​Flink​​​ 基础操作与一个处理数据 ​​Http​​接口的生命周期很像,​接受数据 -> 处理数据 -> 存储数据​​,而 ​​Sink​​ 在翻译有表示【下沉】的意思,也就是我们经常对处理数据后做的一件事:​存储​。这个Sink就包括hdfsSinkDBSink