FlinkDemo--使用优先队列分组求Top5

任务总体逻辑

先是一个实时采集任务,数据从mysql数据库的yhzq_result4表同步到kafka的
topic_dtstack_05 中,然后是一个flink原生任务,对kafka中的数据分组求Top5,并
将各组的Top5写回到mysql的flink_result中。

任务配置情况

  1. 实时采集任务
    在这里插入图片描述
  2. flink原生任务
    需要注意的是参数指定的是任务执行时的并行度,必须填写而且要是大于等于1的整数
    在这里插入图片描述
    任务执行过程
    1.mysql源表中的数据
    在这里插入图片描述
    2.执行sql语句,触发实时采集
INSERT INTO yhzq_result4     SELECT * FROM `yhzq_result4_copy2`

3.导入到kafka中的数据
在这里插入图片描述
4.最后计算出top5导入到数据库中的数据
在这里插入图片描述
主类的代码解读

package com.dtstack;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.api.common.state.ValueState;
import org.apache.flink.api.common.state.ValueStateDescriptor;
import org.apache.flink.api.common.typeinfo.TypeInformation;
import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.tuple.*;
import org.apache.flink.api.java.typeutils.TupleTypeInfo;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.TimeCharacteristic;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.KeyedProcessFunction;
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011;
import org.apache.flink.table.api.Table;
import org.apache.flink.table.api.java.StreamTableEnvironment;
import org.apache.flink.types.Row;
import org.apache.flink.util.Collector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Properties;
public class my_top5 {
    private static org.codehaus.jackson.map.ObjectMapper objectMapper = new org.codehaus.jackson.map.ObjectMapper();
    private static final Logger logger = LoggerFactory.getLogger(my_top5.class);
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime);
        StreamTableEnvironment tableEnv = StreamTableEnvironment.getTableEnvironment(env);
         //设置并行度,为第一个参数
        env.setParallelism(Integer.valueOf(args[0])); 
        //配置连接kafka的信息,并从最新的地方开始消费,所以我们每次刚起这个任务时是消费不到数据的
        //需要在navicat中执行    INSERT INTO yhzq_result4 SELECT * FROM `yhzq_result4_copy2` 向
        //mysql中插入数据从而触发实时采集,kafka便会流入新的数据
        
        Properties properties = new Properties();
        properties.setProperty("bootstrap.servers", "172.16.20.16:9092");
        FlinkKafkaConsumer011<String> consumer1 = new FlinkKafkaConsumer011<>("topic_dtstack_05",
                new SimpleStringSchema(), properties);
        consumer1.setStartFromLatest();
        
        //从kafka数据流中取数据,qiyeJson对象是关键,它通过指定key指定了取kafka中每条json格式数据的哪些值
        //然后过滤掉字段为空的脏数据,最后指定15个值类型为String,然后个数为15的元组的数据流
        
        DataStream&l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值