首页 > 其他分享 >在Flink 1.11中,assignTimestampsAndWatermarks方法已经被新的方法assignTimestamps和assignWatermarks所替代。这是为了更好地将时间戳和

在Flink 1.11中,assignTimestampsAndWatermarks方法已经被新的方法assignTimestamps和assignWatermarks所替代。这是为了更好地将时间戳和

时间:2024-03-26 11:00:31浏览次数:30  
标签:Flink 1.11 flink assignTimestamps 水位 import new public

在Flink 1.11中,assignTimestampsAndWatermarks方法已经被新的方法assignTimestamps和assignWatermarks所替代。这是为了更好地将时间戳和水位线的定义分离开来
以下是使用新API的示例代码:
import org.apache.flink.api.common.eventtime.WatermarkStrategy;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.AssignerWithPunctuatedWatermarks;

public class FlinkEventTimeExample {

public static void main(String[] args) throws Exception {
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    env.setParallelism(1);

    // 假设数据源是一个自定义的无界数据源
    DataStream<MyEvent> stream = env.addSource(new MyCustomSource());

    // 为数据流分配事件时间字段
    stream
        .assignTimestampsAndWatermarks(
            WatermarkStrategy
                .forBoundedOutOfOrderness(Duration.ofSeconds(20))
                .withTimestampAssigner(new SerializableTimestampAssigner<MyEvent>() {
                    @Override
                    public long extractTimestamp(MyEvent element, long recordTimestamp) {
                        return element.getEventTimestamp();
                    }
                })
                .withWatermarkGenerator(new AssignerWithPunctuatedWatermarks<MyEvent>() {
                    @Nullable
                    @Override
                    public Watermark checkAndGetNextWatermark(MyEvent lastElement, long extractedTimestamp) {
                        return new Watermark(lastElement.getEventTimestamp() - 1);
                    }
                })
        );

    // 进一步的数据处理逻辑...

    env.execute("Flink Event Time Example");
}

public static class MyEvent {
    public long getEventTimestamp() {
        // 返回事件时间戳的方法
        return 0;
    }
}

public static class MyCustomSource implements SourceFunction<MyEvent> {
    // 实现自定义数据源的逻辑
}

}

在这个例子中,WatermarkStrategy被用来定义水位线的生成策略。你可以使用forBoundedOutOfOrderness或者forMonotonousTimestamps等方法来指定水位线的生成,并通过withTimestampAssigner指定时间戳的提取方式。如果需要更复杂的水位线生成逻辑,可以通过实现AssignerWithPunctuatedWatermarks接口来定义。

标签:Flink,1.11,flink,assignTimestamps,水位,import,new,public
From: https://www.cnblogs.com/sunny3158/p/18096116

相关文章

  • Flink 流数据处理 基于Flink1.12.0版本 MapFunction 只适用于一对一的转换,而 FlatMap
    Flink流数据处理基于Flink1.12.0版本MapFunction只适用于一对一的转换,而FlatMapFunction中可以一对多,或者多对一序言基于官网教程整理的一个教程。基于Flink1.12.0版本。目前该版本的Flink支持的source与sink如下所示参考资料:https://ci.apache.org/projects/flink......
  • Flink: Function And Rich Function , 对比 Function ,Rich functions还提供了这些方法:o
    Flink:FunctionAndRichFunction,对比Function,Richfunctions还提供了这些方法:open、close、getRuntimeContext和setRuntimeContext序言    了解了Flink提供的算子,那我们就可以自定义算子了.自定义算子的目的是为了更加灵活的处理我们的业务数据,并将满足条件......
  • Flink API的四层抽象级别是什么?能用实际项目案例讲解一下吗? Flink API的四层抽象级别
    FlinkAPI的四层抽象级别是什么?能用实际项目案例讲解一下吗?首先,FlinkAPI的四层抽象级别是指:最底层抽象:ProcessFunctionAPI、核心API:DataStreamAPI、TableAPI、SQL。这四个抽象级别可以比作烹饪中的不同方式,从简单的速食制作到复杂的大餐烹饪。1.最底层抽象:ProcessFunctionAP......
  • 【Flink】Flink如何覆盖系统类、优先加载用户类、child-first使用技巧
    1.概述一个问题,关于类加载的,就是我使用了flink-sql-connector-kafka的依赖,但是我改了这个类,和任务在一个jar包里面,flink-sql-connector-kafka.jar和Flink的lib中的jar在hdfs上,Flinkonyarn的方式提交作业,但是我改的这个类不生效(还是用的flink-sql-connector-kafka里面的......
  • Flink 架构深度解析
    Flink是一个开源的流处理框架,用于处理和分析实时数据流。它以其高吞吐量、低延迟和强大的状态管理能力而闻名。本文将深入探讨Flink的架构设计,帮助读者理解其内部工作原理。1.引言在当今的数据驱动世界中,实时数据处理变得越来越重要。Flink提供了一个高性能、可扩展的平......
  • Flink CEP (四)组合模式
    FlinkCEP(四)组合模式文章目录初始模式(InitialPattern)近邻条件(ContiguityConditions)严格近邻(StrictContiguity)宽松近邻(RelaxedContiguity)非确定性宽松近邻(Non-DeterministicRelaxedContiguity)其他限制条件循环模式中的近邻条件定义好的个体模式,就可以尝试按一定......
  • 一文聊透 Flink 的 Temporal Join
    博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维码进入京东手......
  • 2023-12-22-flink-cdc使用
    应用场景、上手体验应用场景FlinkCDC(ChangeDataCapture)是一种用于捕获和处理数据源中的变化的流处理技术。它可以实时地将数据源中的增量更新捕获到流处理作业中,使得作业可以实时响应数据变化。以下是FlinkCDC的一些常见应用场景:数据仓库和实时分析:FlinkCDC可以......
  • Flink实战之Flink乱序场景汇总
    目录一数据乱序场景1数据源乱序2ETL造成乱序二Flink处理乱序数据方案1Watermark和EventTime模式2提前创建保序任务3使用事务性Sink保证下游数据时序三结语       在数据处理领域,无论离线批处理领域还是实时流处理领域,数据时序性对于最终数据的......
  • Flink 自定义 ClickHouse Table Connector 的简单实现
    本次实现基于Flink1.18版本,具体的对象之间的关系可以先参考官网的图:先拿官网上的Socket示例来说一下实现过程:首先编写SocketDynamicTableFactory实现DynamicTableSourceFactory接口。在SocketDynamicTableFactory中会返回SocketDynamicTableSource,同时返回实现......