文章目录
1、什么是Flink
Flink是架构在有界和无界流数据上的有状态的分布式计算引擎,既可以处理流数据又可以处理批数据(批是流的特例)
1.1 有界无界流
- Unbounded streams:无界流,即流数据,定义了开始,没有定义结束
- Bounded streams:界流,即批数据,定义了开始以及结束。
将连续的批处理放大即是流处理
1.2 部署模式
Flink可以部署在 Hadoop YARN,Apache Mesos,Kubernetes ,Stand-alone ,Cloud ,Local,和Spark很类似,同Spark一样 on yarn模式 是没有HA的,只作为一个提交程序的客户端。 Stand-alone 模式必须要有部署HA。同一份代码可以在任何环境运行! 无需更改,开发学习的过程使用local 模式即可
2.Flink的编程模型
2.1编程模型从低到高如下所示:
Stateful streaming process (low) =》DataStream / DataSet API (Core) =》Table API =》SQL
- DataStream API:处理无界数据
- DataSet API:处理有界数据
2.2Time
- Event Time:数据产生的时间
- Ingestion time:数据摄入的时间,即数据进入Flink
- Processing Time:数据处理时间
2.2 常见的计算引擎编程过程
MapRreduce: input ==> map(reduce) ==> output
Spark : input ==> transformations ==> actions ==> output
Storm : input ==>Spout ==>Bolt ==> output
Flink : source ==> transformations ==> sink
3.Flink vs Spark Streaming vs Structured Streaming vs Strom(基本/trident) 简单对比
Strom(基本)是实时流计算, Storm(trident)是微批次计算。storm已过时。
- 实时性:Flink 、Storm、Structured Streaming 是真实时流处理,而Spark是微批次处理
- 延时性:Flink 、Storm 、Structured Streaming 延时较低,Spark延时较高
- 吞吐量: Storm(基本)吞吐量最低
4.WC编程案例
相较于java,使用scala进行编程使得代码更加优美,简洁。编程五步走,非常的有规则的编程。
注意:Flink加载数据以及transformation操作是lazy的,当执行execute时才会真正的触发执行。
4.1依赖的pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wsk.flink</groupId>
<artifactId>flink-train</artifactId>
<version>1.0-SNAPSHOT</version>
<inceptionYear>2008</inceptionYear>
<properties>
<scala.version>2.11.8</scala.version>
<flink.version>1.8.1</flink.version>
<scala.binary.version>2.11</scala.binary.version>
</properties>
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>