您好,我是Flink的新手,目前正在尝试建立一个基本管道,该管道从随机字符串生成器接收数据,执行wordCount并将输出保存到文件中。我有兴趣确保flink程序一直运行,直到我决定手动停止它或不再有输入数据为止。但是,即使仍在生成输入数据,该程序也会启动和结束。
我尝试使用以下两个窗口代码之一,但未成功:
.window(ProcessingTimeSessionWindows.withGap(Time.minutes(10))) .timeWindow(Time.of(2500,MILLISECONDS),Time.of(500,MILLISECONDS))
以下是连续运行的输入文件的示例:
ACBAB 欧共体 计算机辅助设计 伊达 英国广播公司 DCADD
这是我当前正在运行的代码:
公共静态void main(String [] args)引发异常{
final ParameterTool params = ParameterTool.fromArgs(args);
// set up the execution environment
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// get input data
DataStream<String> text = null;
if (params.has("input")) {
// read the text file from given input path
text = env.readTextFile(params.get("input"));
} else {
System.out.println("Executing WindowWordCount example with default input data set.");
System.out.println("Use --input to specify file input.");
// get default test text data
text = env.fromElements("input");
}
// make parameters available in the web interface
env.getConfig().setGlobalJobParameters(params);
DataStream<Tuple2<String, Integer>> stream =
text.flatMap(new WindowWordCount.Tokenizer())
.keyBy(0)
.timeWindow(Time.of(2500, MILLISECONDS), Time.of(500, MILLISECONDS))
.sum(1);
// emit result
if (params.has("output")) {
stream.writeAsText(params.get("output"));
} else {
System.out.println("Printing result to stdout. Use --output to specify output path.");
stream.print();
}
// execute program
env.execute("WindowWordCount");
}
public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
// normalize and split the line
String[] tokens = value.toLowerCase().split("\\W+");
// emit the pairs
for (String token : tokens) {
if (token.length() > 0) {
out.collect(new Tuple2<>(token, 1));
}
}
}
}
}
程序运行正常,并在一段时间后停止,并显示以下消息:
开始执行程序 程序执行完成 JobID为74a6f54d80af96f029a8e6c32d9bc8da的作业已完成。 作业时间:176994毫秒
我想要的是使程序保持运行,因为我有兴趣分析flink引擎的性能指标。