Flink

大数据基础

Posted by Galvin on August 22, 2019

核心数据结构:Stream 与 Spark 的 RDD 不同的是,Stream 代表一个数据流而不是静态数据的集合。所以,他包含的数据是随着时间增长而变化的。而且 Stream 上的转换操作都是逐条进行的,即每当有新数据进来,整个流程都会被执行并更新结果。这样的处理模式决定了 Flink 比 Spark Stream 有更低的流处理延迟性。

Flink架构

  • 存储层
  • 部署层
  • 核心处理引擎
  • high-level 的 API 和库 image

相同点

  • 基于内存计算
  • 都有统一的批处理和流处理API,支持类似 SQL 的编程接口
  • 支持很多相同的转换操作,编程都是用类似于 Scala Collection API 的函数式编程模式
  • 都有完善的错误恢复机制
  • 支持 Exactly once 的语义一致性

不同点

  • 流处理角度:Spark 基于微批量处理,把流数据看成是小块的批处理数据块,延迟性在秒级。Flink 是基于事件处理的,做到了真正的流处理,支持毫秒级运算
  • SQL功能角度:Spark 和 Flink 分别提供 SparkSQL 和 Table API 提供 SQL 交互支持。两者相比较,Spark 对 SQL 支持更好,相应的优化、扩展和性能更好。
  • 迭代计算角度:Spark 对机器学习的支持很好,因为可以在内存中缓存中间计算结果来加速机器学习算法的运行。但是大部分机器学习算法其实是一个有环的数据流,在 Spark 中,却是用无环图来表示。而 Flink 支持在运行时间中的有环数据流,从而可以更有效的对机器学习算法进行运算。