各位,Flink 的离线计算的数据是怎么存放的?是存在 HDFS(或Hive)上的吗?
先将离线数据预先加载到sink端,或者将数据保存到Flink State中去。 如果离线数据的计算结果在mysql中,那么可以使用类似维表的方式直接进行Stream操作 加载离线写入State
OSS 可与 Flink 一起使用以读取与存储数据 https://nightlies.apache.org/flink/flink-docs-master/zh/docs/deployment/filesystems/oss/
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中。
Flink在做大数据的离线计算时,当然是把所有数据读到内存中的。至于开销,因为它是分布式的,理想状况下,开销是单台机器的开销,和普通的单机数据处理开销是一样的。
无论何种 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 大状态场景
Flink 基础操作与一个处理数据 Http接口的生命周期很像,接受数据 -> 处理数据 -> 存储数据,而 Sink 在翻译有表示【下沉】的意思,也就是我们经常对处理数据后做的一件事:存储。这个Sink就包括hdfsSink\DBSink
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。