01-Flink 入门
1. Flink 定义
Apache Flink is a framework and distributed process engine for stateful computations over unbounded and bounded data streams.
Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算。
Streams
Flink 认为,一切都是由流组成的,离线数据是有界的流;实时数据是一个没有界限的流。
Bounded streams: 有界流,有始有终的数据集合,数据集合的大小是有限定的。(1TB 的数据)
Unbounded stream:无界流,有始无终的的数据流,数据的多少是不确定的。
State
无状态:数据来一条处理一条,数据无需留在系统中。
有状态:数据或数据的计算结果需要在系统中进行保留。
Time
在我们的传统编码过程中,并没有对于时间做严格的区分,往往是数据来一条便处理一条,但此时所处理的数据并不是数据产生的真实时间。数据需要通过网络进行传输,如果网络时延较大,程序处理距离数据产生的真实时间也就有了较大的时差。
Event Time:事件发生的时间。
Ingestion Time: 事件进入 Flink 的时间。
Process Time:Flink 开始处理事件的时间。
API
Flink 中的 API 分为一下三类:
- 越顶层越抽象,表达含义越简明,使用越方便。
- 越底层越具体,表达能力越丰富,使用越灵活。
2. Flink 快速上手
创建 maven 工程
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tencent</groupId>
<artifactId>FlinkTutorial</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.10.1</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.12</artifactId>
<version>1.10.1</version>
</dependency>
</dependencies>
</project>
wordcount
有如下一个需求,通过 Flink 统计单词出现的个数。
批处理
hello.txt 文件内容如下:
hello flink
hello spark
hello datahub
hello java
批处理代码如下:
import org.apache.flink