Flink 是一个流式处理框架,可以用于实时处理和分析大规模数据流。
创建 Flink 项目
创建 Flink Maven 项目,如下所示:
确定项目的名称如下所示:
修改 Maven 项目的 pom.xml 文件中添加 Flink 的依赖项。以下是一个示例的 pom.xml 文件:
<properties>
<flink.version>1.9.2</flink.version>
<scala.binary.version>2.12</scala.binary.version>
<scala.version>2.12.17</scala.version>
</properties>
<dependencies>
<!-- flink -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>${flink.version}</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
</dependencies>
编写 WordCount 程序
下面是一个使用 Flink 编写的简单的第一个程序的示例:
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;
public class WordCount {
public static void main(String[] args) throws Exception {
// 创建执行环境
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 创建数据源
DataStream<String> text = env.fromElements(
"Hello Flink",
"Hello World",
"Flink is awesome"
);
// 对数据流进行操作
DataStream<Tuple2<String, Integer>> counts = text
.flatMap(new Tokenizer())
.keyBy(0)
.sum(1);
// 输出结果
counts.print();
// 执行任务
env.execute("WordCount");
}
public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
// 将输入字符串拆分为单词,并输出每个单词的频率
String[] words = value.toLowerCase().split("\W+");
for (String word : words) {
if (word.length() > 0) {
out.collect(new Tuple2<>(word, 1));
}
}
}
}
}
这个程序实现了一个简单的单词计数功能。它将输入的文本流拆分成单词,并统计每个单词出现的次数,然后将结果打印出来。
启动 Flink
本地执行
本地执行结果如下图所示:
在 Flink Docker 环境上执行
修改打包主函数,如下所示:
执行打包脚本,如下所示:
打包结果如下:
执行脚本如下所示:
在执行脚本之前,需要先在本地搭建 flink 环境搭建
## 将打包后的 jar 包拷贝到 flink 环境下
docker cp flink-demo/target/flink-demo-1.0-SNAPSHOT.jar example_jobmanager_1:/opt/
docker exec -it example_jobmanager_1 bash -c 'flink run /opt/flink-demo-1.0-SNAPSHOT.jar'
执行之后的结果在页面上可以看到,具体内容如下所示:
请注意,这只是 Flink 的一个简单示例,你可以根据自己的需求和数据进行更复杂的操作和处理。