Flink与Hadoop和Spark有何不同?

Flink 与 Hadoop 和 Spark 的主要不同点在于:
数据处理方式:

  • Flink 流式计算,基于数据流进行运算。
  • Hadoop 和 Spark 批式计算,基于数据集块进行运算。

    程序模型:
  • Flink 基于数据流的转换模型(transformation model), Transformation 的操作结果立即发生改变。
  • Hadoop MapReduce 和 Spark 基于数据集的转换模型(Dataset model),需要执行 Action 操作后才会真正触发计算。

    状态管理:
  • Flink 有先进的状态管理机制,可以方便处理有状态的计算(stateful computation)。
  • Hadoop 和 Spark 通过外部存储系统来管理状态。

    容错能力:
  • Flink 有强大的容错功能,支持精确一次(exactly-once)的状态更新。
  • Hadoop 无法保证处理成果的精确性。Spark 只支持至少一次(at-least-once)的状态更新。

    性能:
  • Flink 具有更高的吞吐量和更低的延迟。Flink 的运行时专为流计算进行了优化。
  • Hadoop 和 Spark 的运行时更加通用。

例如,一个简单的 Flink 程序:

DataStream<SensorReading> dataStream = env.readTextFile("sensor-data"); 

dataStream.filter(reading -> reading.temperature > 30)
       .reduce((first, second) -> first.temperature + second.temperature)  
       .addSink(new SensorAlertSink()); 

这个 Flink 程序会读取 sensor 数据流,过滤温度大于 30 的数据,对温度值进行求和,并将结果输出到报警器。