Flink是一个流处理计算框架软件。流处理的特点是它面向处理unbounded 数据,也就是说数据会不断的到达,然后等待处理。取决于Flink应用,数据会被不同的LOGIC来处理。
Flink的架构是提供一个distribued streaming dataflow, 上面是DataStream API for streaming, and DataSet API for batch.
DataStream上层提供EVENT processing (CEP, 复杂事件处理)和table for relational。
DataSet上层像Spark一样提供,Graph (Gelly),ML(FlinkML),and relational。
Flink是个主从结构的架构,使用Yarn做resource manager.
好玩的是Flink和Spark采用了不同的容错机制:Flink采用了Chandy-Lamport分布式快照机制和checkpoint。Spark采用了Lineage血统和重新计算。
在数据处理保证方面,Flink和Spark都提供了exactly once语义。Spark采用了Chandy-Lamport算法,即Marker-checkpoint。
Flink程序定义了处理的方向。首先定义Stream,它有起点和终点。起点是一个或多个Source。终点是一个或多个Sink。
有点像Spark,先定义一个DataSet,通过不断的Transform,最后到达一个Action.
在Flink的世界里,先定义一个Source,通过不断的Transform,最后到达一个Sink。
**每个transform产生一个新的stream。**Collectively, they form a stream flow.
例子,从Kafka读出来的log被Parse成Event,Event在时间窗内被统计和处理,最后由一个Sink来消费。