Flink Windows窗口计算

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_39443053/article/details/100587804

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;
    }
    
}

猜你喜欢

转载自blog.csdn.net/qq_39443053/article/details/100587804