版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
Flink Windows窗口计算
点关注不迷路,欢迎再访!
滚动窗口完整案例
/**
* @author ex_sunqi
*
*/
@Component
public class KafkaFlinkJob implements ApplicationRunner {
private final static Logger logger = LoggerFactory.getLogger(KafkaFlinkJob.class);
@Autowired
private Properties kafkaProps;
@SuppressWarnings("all")
@Override
public void run(ApplicationArguments args) throws Exception {
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(6000);
env.setStateBackend( new FsStateBackend("file:///opt/tpapp/flinkdata", true ));
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(1000);
env.getCheckpointConfig().setCheckpointTimeout(60000);
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
env.setParallelism(1);
DataStream<String> sourceStream = readFromKafka(env,kafkaProps);
logger.info("************************获取到kafka数据开始转换业务数据*********************************");
DataStream<Tuple2<String, Integer>> dataStream = sourceStream.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
@Override
public void flatMap(String s, Collector<Tuple2<String, Integer>> collector) throws Exception {
String[] tokens = s.toLowerCase().split("\\W+"); //从有非单词字符处分开
for (String token : tokens) {
if (token.length() > 0) {
collector.collect(new Tuple2<String, Integer>(token, 1));
}
}
}
})
.keyBy(0)
.timeWindow(Time.seconds(50))
.sum(1);
logger.info("************************获取到kafka数据转换业务数据结束*********************************");
dataStream.print();
env.execute("flink-score-job");
}
public static DataStream<String> readFromKafka(StreamExecutionEnvironment env,Properties kafkaProps) {
DataStream<String> stream = env
.addSource(new FlinkKafkaConsumer09<>("score-topic-1", new SimpleStringSchema(), kafkaProps))
.name("kafka-source")
.setParallelism(1);
return stream;
}
}