模拟flink处理无限数据流 - 指南

如果没有在 linux 环境下安装 flink ,先看我的上一篇文章:如何搭建Linux环境下的flink本地集群-CSDN博客

使用工具:IntelliJ IDEA 2021,Maven 3.6.1

第一步,创建一个空的 Maven 项目,导入依赖

4.0.0
org.example
flinkLearn
1.0-SNAPSHOT
org.apache.flink
flink-runtime-web
${flink.version}
ch.qos.logback
logback-classic
1.2.11
org.apache.flink
flink-streaming-java
${flink.version}
org.apache.flink
flink-clients
${flink.version}
8
8
1.17.0
org.apache.maven.plugins
maven-shade-plugin
3.2.4
package
shade
com.google.code.findbugs:jsr305
org.slf4j:*
log4j:*
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA

等等依赖下载完毕

第二步,编写分词处理无界流代码

此刻先不要运行,因为还没有数据源

import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;
public class StreamNoBundedWordCount {
public static void main(String[] args) throws Exception{
//拿到执行环境
StreamExecutionEnvironment evn = StreamExecutionEnvironment.getExecutionEnvironment();
//数据源 source
//注:加 returns 是因为 lambda 表达式无法识别二元组中的类型,故手动指定以避免报错
DataStreamSource source = evn.socketTextStream("localhost", 8888);
SingleOutputStreamOperator> sum = source.flatMap((String value, Collector> out) -> {
String[] words = value.split(" ");
for (String word : words) {
out.collect(Tuple2.of(word, 1));
}
})
.returns(Types.TUPLE(Types.STRING,Types.INT))
.keyBy((Tuple2 value) -> value.f0)
.sum(1);
//写入,sink
sum.print();
//执行
evn.execute();
}
}

第三步,进入 linux 环境,安装 netcat 模拟数据源发送数据

安装 netcat

sudo apt update
sudo apt install netcat

验证安装情况

nc --version

模拟数据源,监听 8888 端口

nc -lk 8888

第四步,启动程序

点击 绿色按钮 启动 Main 程序后

在 netcat 中发送数据比如 hello world

可以看到程序可以正常运行

第五步,打包并上传到 linux 中的 flink 集群中

 点开右侧的 Maven 选项,找到生命周期,先 clean 一下,将多余文件清除

再 packge

成功后会生成一个 target 文件夹,找到其中的 jar 包,会生成两个

两个都能用,上面那个东西要少一些 

然后我们将 jar 包上传到 flink 的 web UI 上

点击 add new

找到我们刚刚生成的 jar 包 并点击 "打开" 上传

点击 jar 包,为其指定启动类,指定并行度,这里我写的 2

 可以看到 作业启动成功

接下来,我们再 netcat 中发送数据 hello

可以看到, 集群中的 task Managers 成功接收到了数据并进行词频统计

posted @ 2025-07-31 17:12  wzzkaifa  阅读(7)  评论(0)    收藏  举报