场景:监听一个文本流端口进行数据的实时计算(字符出现的次数)
一、在liunx中开启一个端口
[root@sdata-sightwise03 ~]# nc -lk 7777
二、编写任务代码
public class Test {
public static void main(String[] args) throws Exception {
//创建执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
//获取程序入参
ParameterTool tool = ParameterTool.fromArgs(args);
String host = tool.get("host");
Integer port = tool.getInt("port");
//读取文本流
DataStreamSource<String> source = env.socketTextStream(host, port);
SingleOutputStreamOperator<Tuple2<String, Integer>> operator = source.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
@Override
public void flatMap(String s, Collector<Tuple2<String, Integer>> collector) throws Exception {
String[] splits = s.split(" ");
for (String split : splits) {
collector.collect(new Tuple2<>(split, 1));
}
}
}).filter(data -> StringUtils.isNotEmpty(data.f0)).keyBy(data -> data.f0).sum(1);
//打印
operator.print();
//执行
env.execute();
}
}
三、打包并提交jar包
在liunx窗口输入字符,查看flink日志已动态打印字符出现的次数