开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink这个应该怎么做,才能满足?

Flink这个应该怎么做,才能满足?我想统计同一用户最近一小时的总点击数,近一小时不是整点的小时,是指基于最新一条数据的时间,往前一小时,统计这个范围的总点击数;目前出来的结果是,所有该用户的点击数,不只是一个小时的。

展开
收起
三分钟热度的鱼 2023-11-30 17:03:10 36 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    要实现统计同一用户最近一小时的总点击数,可以使用Flink中的滚动窗口(Tumbling Windows)和事件时间(Event Time)处理。以下是一个基本的实现示例:

    // 定义一个POJO类表示点击事件
    public class ClickEvent {
        private String userId;
        private long timestamp;
    
        // 省略构造函数和Getter/Setter方法
    }
    
    // 创建流执行环境
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    
    // 设置事件时间类型为使用ClickEvent中的timestamp字段
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
    
    // 创建数据流,假设数据源是一个Kafka主题
    DataStream<ClickEvent> clickEvents = env
        .addSource(new FlinkKafkaConsumer<>("click-events", new ClickEventDeserializationSchema(), props))
        .assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor<ClickEvent>(Time.minutes(10)) {
            @Override
            public long extractTimestamp(ClickEvent event) {
                return event.getTimestamp();
            }
        });
    
    // 按照userId进行分组,并在滚动窗口内进行聚合计算
    SingleOutputStreamOperator<Tuple2<String, Long>> result = clickEvents
        .keyBy(click -> click.getUserId())
        .window(TumblingEventTimeWindows.of(Time.hours(1)))
        .sum("count");
    
    result.print();
    
    // 执行作业
    env.execute("User Clicks");
    

    上述代码中,我们按照ClickEvent对象中的timestamp字段进行事件时间的处理。通过将事件时间设置为Kafka消息的时间戳,并使用BoundedOutOfOrdernessTimestampExtractor指定一个合适的乱序程度,以确保窗口计算的准确性。

    2023-11-30 21:30:52
    赞同 展开评论 打赏
  • 是不是可以用over窗口实现,或者试试Timer。 此回答整理自钉群“实时计算Flink产品交流群”

    2023-11-30 17:22:40
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 覃立辉 立即下载
    Flink CDC Meetup PPT - 孙家宝 立即下载
    Flink CDC Meetup PPT - 徐榜江 立即下载