flink可以从scoket流中加载数据源
首先,我们需要先获取执行环境(必需),
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
设置处理模式(默认不设置为流(如果加载数据源为有界批,流处理模式会报错)) 、
env.setRuntimeMode(RuntimeExecutionMode.AUTOMATIC);
并行度(非必须)等等
env.setParallelism(1);
下面进行加载socket数据源演示
服务端
我们在服务器中模拟socket流
Linux服务器上安装nc命令
yum install -y nc
在服务器上向指定端口发送数据
如果服务器有防火墙或安全组 需要开启或放开对应端口
`nc -lk 指定的端口`
客户端(代码端)
DataStream<String> source = env.socketTextStream("ip", 监听的端口);
完整代码如下:
public class FlinkSourceBySocket {
public static void main(String[] args) throws Exception {
//准备环境 env
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setRuntimeMode(RuntimeExecutionMode.AUTOMATIC);
//获取数据 source
//需要在对应服务器上执行 nc -lk 端口 命令
DataStream<String> source = env.socketTextStream("服务器ID", 监听的端口);
//数据处理
//数据收集 sink
source.print();
//程序执行 execute
env.execute("flink-source-socket");
}
}
演示结果:
flink 读取scoket数据程序何时终止计算?
当服务端主动断开,例如使用ctrl+c
或者代码端(客户端)读取数据超时