flink 1.14 异步 join 基础分析

本文分析了Flink 1.14中异步Join的实现,探讨如何在异步处理中保持数据顺序。通过使用有序队列和异步Future,Flink确保了输入数据的顺序与输出顺序一致,从而提高并发性能。文章还介绍了Flink的AsyncWaitOperator和OrderedStreamElementQueue的角色以及数据完成后的发送流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@[TOC] flink 1.14 异步 join 思考

背景

flink 1.14 还没提供异步sql 版本jdbc join ,同时也没提供自定义传入SQL 查询结果集,然后再join的功能,但是他们提供了相关接口,恰好这两个功能对提升join 性能,以及SQL的灵活性上有需求,实现了一个版本。其中遇到一个问题,“异步join 的时候,如何保证顺序”?

你需要知道

 CustomSqlRowDataAsyncLookupFunction extends AsyncTableFunction<RowData> {
   
 
 public void eval(CompletableFuture<Collection<RowData>> future, Object... keys) {
   
 // 异步实现逻辑
 // 通过继承 AsyncTableFunction 实现自己的异步函数
 }
}

其次写过原生datastream 进行异步join的得知道有两个类:

// 这是异步以前用这个实现异步join 的方法,以及参数:AsyncDataStream
 public static <IN, OUT> SingleOutputStreamOperator<OUT> unorderedWait(
            DataStream<IN> in, 
            AsyncFunction<IN, OUT> func, 
            long timeout, 
            TimeUnit timeUnit) {
   
        return addOperator(/*参数略*/, OutputMode.UNORDERED);
    }


  public static <IN, OUT> SingleOutputStreamOperator<OUT> orderedWait(
            DataStream<IN> in,
            AsyncFunction<IN, OUT> func,
            long timeout,
            TimeUnit timeUnit,
            int capacity) {
   
        return addOperator(/*参数略*/, OutputMode.ORDERED);
    }
    
// 核心参数,也就是Operator 通过这个区分了是否有序
OutputMode.UNORDERED
OutputMode.ORDERED

其次

flink 不至于用多套逻辑实现异步,flink-sql 是翻译成算子,也是调用了datastream api 实现这个逻辑,因此我们来看看。
对于async 的 Operator 会有自己的工厂方法:

    /* 工厂创建 */
    public AsyncWaitOperatorFactory(
            AsyncFunction<IN, OUT> asyncFunction,
            long timeout,
            int capacity,
            AsyncDataStream.OutputMode outputMode) {
   
        // 定义的function,包括自定义的function。
        // 本质上我们的操作都是一个function进行处理的
        this.asyncFunction = asyncFunction;
        // 异步的情况一般是需要队列+异步完成时间实现的
        // 默认timeout:180000 capacity:100 
        this.timeout = time
Flink 1.14 版本是大数据处理框架 Flink 的最新发布版本,下面是对 Flink 1.14 版本教程的回答。 Flink 是一个开源的流处理和批处理框架,能够快速、高效地处理大规模数据。Flink 1.14 版本的教程主要包括以下几个方面的内容: 1. 环境搭建:教程会指导用户如何在本地或者云上搭建 Flink 1.14 版本的运行环境。包括安装和配置 JDK、Flink、相关的依赖库等。 2. 基本概念和架构:介绍 Flink 的基本概念和核心架构,包括数据流的处理模型、数据流的转换操作和窗口操作等。帮助用户理解 Flink 的基本工作原理。 3. 流处理:详细介绍 Flink 1.14 版本中的流数据处理功能,包括数据源的定义、数据转换的操作符和函数、窗口操作和触发器等。提供实际示例和代码演示,帮助用户快速上手。 4. 批处理:介绍 Flink 1.14 版本中的批数据处理功能,包括批处理 API 的使用、批处理作业的调度和执行等。让用户了解如何使用 Flink 处理离线批处理任务。 5. 故障恢复和容错机制:讲解 Flink 1.14 版本中的故障恢复和容错机制,包括检查点和保存点的使用、故障恢复的策略、状态后端的选择等。帮助用户保证作业的可靠性和稳定性。 6. 集成和扩展:介绍 Flink 1.14 版本的集成和扩展机制,包括与其他开源组件的集成、自定义函数和操作符的开发等。让用户了解如何在 Flink 中实现自己的需求。 总结来说,Flink 1.14 版本的教程致力于向用户展示如何使用 Flink 进行流处理和批处理,并提供了丰富的实例和代码演示,帮助用户快速上手。同时,教程还介绍了 Flink 的故障恢复和容错机制,以及集成和扩展的能力,帮助用户在实际应用中更好地利用 Flink 的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值