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

求大佬们帮帮忙,为什么我的开窗用处理时间能输出结果,可是用事件事件却没有输出结果

1852问.png 1852问问.png

展开
收起
游客3oewgrzrf6o5c 2022-07-20 14:31:30 366 0
1 条回答
写回答
取消 提交回答
  • 全栈JAVA领域创作者

    可能是因为你的开窗函数使用的是处理时间,而不是事件时间。在Flink中,处理时间是指事件被处理的时间,而不是事件发生的时间。因此,如果你的开窗函数使用的是处理时间,那么可能会出现无法输出结果的问题。
    为了解决这个问题,可以将开窗函数的时间字段设置为事件时间,而不是处理时间。例如,可以将开窗函数的时间字段设置为“watermarkTime”,例如:

    CREATE TABLE input_table (
      id INT,
      name STRING,
      age INT,
      value DOUBLE
    ) WITH (
      'connector' = 'kafka',
      'topic' = 'input-topic',
      'properties.bootstrap.servers' = '<kafka-bootstrap-servers>',
      'properties.group.id' = '<kafka-group-id>',
      'format' = 'json'
    );
    CREATE TABLE output_table (
      id INT,
      name STRING,
      age INT,
      value DOUBLE,
      lower_bound TIMESTAMP(3),
      upper_bound TIMESTAMP(3)
    ) WITH (
      'connector' = 'kafka',
      'topic' = 'output-topic',
      'properties.bootstrap.servers' = '<kafka-bootstrap-servers>',
      'properties.group.id' = '<kafka-group-id>',
      'format' = 'json'
    );
    CREATE TABLE window_table (
      id INT,
      name STRING,
      age INT,
      value DOUBLE,
      lower_bound TIMESTAMP(3),
      upper_bound TIMESTAMP(3)
    ) WITH (
      'connector' = 'kafka',
      'topic' = 'window-topic',
      'properties.bootstrap.servers' = '<kafka-bootstrap-servers>',
      'properties.group.id' = '<kafka-group-id>',
      'format' = 'json'
    );
    CREATE VIEW window_view AS
    SELECT 
      id,
      name,
      age,
      value,
      lower_bound,
      upper_bound
    FROM window_table
    WHERE lower_bound <= TIMESTAMP(3) AND upper_bound >= TIMESTAMP(3);
    

    其中,lower_bound和upper_bound都使用了事件时间,而不是处理时间。这样就可以输出开窗函数的结果了。需要注意的是,如果你的开窗函数使用的是事件时间,那么需要在Flink Job代码中指定事件时间解析器的版本,例如:

    
    Configuration config = new Configuration();
    config.setString("dataformat.eventtime.version", "1.5.0");
    EventTimeIOFactory factory = new EventTimeIOFactory(config, new EventTimeDeserializer(), new EventTimeDeserializer());
    

    这样就可以使用事件时间进行开窗操作了。

    2023-07-29 20:09:18
    赞同 展开评论 打赏

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

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载