Flink源码分析--(一)异步I/O访问外部数据:AsyncWaitOperator

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

一、异步I/O概述

Flink流计算系统中经常需要与外部系统进行交互,比如需要查询外部数据库以关联上用户的额外信息。通常,我们的实现方式是向数据库发送用户a的查询请求(例如在MapFunction中,同步方式访问),然后等待结果返回,在这之前,我们无法发送用户b的查询请求

Flink Async I/O允许用户在数据流中使用支持异步访问的客户端(如果数据库没有可以自行封装,例如自己实现一个Runnable,run()方法最后调用#asyncInvoke()提供的resultFuture返回结果),AsyncWaitOperator会处理与数据流的交互,同时在处理顺序、事件时间、容错有相应的实现,能够提升访问数据库的并发度和流计算系统并行处理性能

本文主要介绍异步I/O在Flink源码层的实现,关于异步I/O应用层原理,推荐阅读Flink(1.9.0)官方文档,里面介绍得比较详细:Asynchronous I/O for External Data Access ,也有一些翻译文章Flink学习笔记:异步I/O访问外部数据,对应Github代码示例在AsyncIOExample<

深入理解Flink异步I/O原理 当StreamElement被添加到指定的StreamElementQueue队列后,接着就该调用用户自定义处理函数AsyncFunction#asyncInvoke()方法来对队列中的StreamElement执行异步处理逻辑。回顾demo,在自定义处理函数的最后,手动调用了ResultFuture.complete()方法。作为ResultFuture接口的实现子类,ResultHandler提供了对“执行完异步处理逻辑的结果”进行后续处理的具体实现逻辑/** 阅读详情

相关推荐

FlinkAsyncDataStream

flink使用过程中,虽然flink有state(状态)可以用来存储很多的缓存数据,但是不可避免的要与其他如redis,hbase 发生交互,除了这些数据库外 更常见的是可能业务需要去调个api填充信息,默认情况下,在MapFunction中,单个并行只能用同步方式去交互: 将请求发送到外部存储,IO阻塞,等待请求返回,然后继续发送下个请求。这种同步交互的方式往往在网络等待上就耗费了大量时间 。 Flink 在1.2中引入了Async I/O,在异步模式下,将IO操作异步化,单个并行可以连续发送多个请

a724952091的博客 5635

flink- AsyncDataStream 异步处理

1、AsyncDataStream有2个方法:unorderedWait表示数据不需要关注顺序,处理完立即发送,orderedWait表示数据需要关注顺序,为了实现该目标,操作算子会在该结果记录之前的记录为发送之前缓存该记录。这往往会引入额外的延迟和些Checkpoint负载,因为相比于无序模式结果记录会保存在Checkpoint状态内部较长的时间。 ...

龍承leo 3178

Flink异步IO RichAsyncFunction:解决大数据处理中的状态问题

在本文中,我们将探讨这个问题,并提供种解决方案。综上所述,尽管RichAsyncFunction本身不直接支持状态管理,但我们可以利用Flink的KeyedStateBackend机制来实现在RichAsyncFunction中管理状态。通过使用KeyedStateBackend,我们可以将状态管理委托给Flink的状态机制,并实现异步IO操作和状态管理的结合。我们可以利用KeyedStateBackend来管理RichAsyncFunction中的状态,以实现异步IO操作和状态管理的结合。

AlianBlank的博客 865

Flink笔记-异步IO

1、异步IO AsyncDataStream Async I/O提供了两种模式:ORDERED和UNORDERED. UNORDERED:异步请求结束就马上输出结果,因为异步请求完成时间的不确定性,结果输出的顺序可能和输入不同. 此模式调用:AsyncDataStream.unorderedWait(...) ORDERED:在这个模式下结果输出的顺序和输入的顺序是样的,为了实现这...

ooeeerrtt的博客 1360

Flink学习笔记:异步I/O访问外部数据

说明:本文为《Flink大数据项目实战》学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习CSDN官网课程: Flink大数据项目实战:http://t.cn/ExrHPl9 Aysnc I/O 1.1Aysnc I/O是啥? Async I/O 是阿里巴巴贡献给社区的个呼声非常高的特性,于1.2版本引入。 主要目的:是为了解决与外部系统交互时...

大数据研习社 3438

Flink 算子性能优化深度解析

Flink算子链优化技术解析 算子链(Operator Chain)Flink的核心优化技术,通过将多个算子合并到同Task中执行,实现: 零网络传输:数据通过方法调用直接传递 零序列化开销:避免数据序列化/反序列化 减少线程切换:多个算子在同线程执行 提升CPU缓存命中率 算子链的形成需满足严格条件: 下游算子仅有个输入 同Slot共享组 并行度匹配 Forward分区策略 非异步算子 ChainingStrategy提供4种策略控制链式行为,包括默认链接(ALWAYS)、禁止链接(NEVER)

mn_kw的博客 1218

flink异步接口调用

同步接口的调用,是在接口响应之后,才能进行下数据的请求方法,在接口性能不佳的情况下,严重影响flink的性能,这与flink的实时思想有违背,为了避免这种情况,我们在接口调用的时候,可以采取异步的方式。 不废话,直接上代码,需要原理自行官方文档。 AsyncDataStream.unorderedWait(dataSource, new HttpAsyncFunction("url"), 300...

qq_44962429的博客 2953

Flink实现异步IO实战 java

Asycn IO应用于DataStream AsyncDataStream个工具类,用于将AsyncFunction应用于DataStream,AsyncFunction发出的并发请求都是无序的,该顺序基于哪个请求先完成,为了控制结果记录的发出顺序,flink提供了两种模式,分别对应AsyncDataStream的两个静态方法,OrderedWait和unorderedWait AsyncDataStream.orderedWait(); AsyncDataStream.unorderWait(); o

紫蝶侠的博客 914

Flink异步算子的原理及使用

Flink的特点是高吞吐低延迟。但是Flink中的某环节的数据处理逻辑需要和外部系统交互,调用耗时不可控会显著降低集群性能。这时候就可能需要使用异步算子让耗时操作不需要等待结果返回继续执行后面的逻辑。看完本章我们能学到:异步算子源码分析异步算子为啥能够保证有序性、flinksql中怎么自定义使用异步lookup join

weixin_50210283的博客 1717

聊聊flinkAsyncWaitOperator

序 本文主要研究flinkAsyncWaitOperator AsyncWaitOperator flink-streaming-java_2.11-1.7.0-sources.jar!/org/apache/flink/streaming/api/operators/async/AsyncWaitOperator.java @Internal public class AsyncWaitO...

weixin_33778778的博客 489

flink 异步IO AsyncFunction

flink使用AsyncFunction 在流式处理的过程中, 在中间步骤的处理中, 如果涉及到些费事的操作或者是外部系统的数据交互, 那么就会给整个流造成定的延迟.flink 的 1.2 版本中引入了 Asynchronous I/O, 能够支持异步的操作, 以提高 flink 系统与外部数据系统交互的性能及吞吐量. 在使用 Flink异步 IO 时, 主要有两个 API可以使用, 个是AsyncDataStream.unorderedWait( ), ...

yang灬仔 1573

Flink DataStream Aysnc IO 实现原理

Flink 的 Async I/O 功能旨在解决流计算系统中与外部系统交互时的网络延迟问题。通过异步模式,系统可以并发处理多个请求和回复,避免同步访问中的阻塞等待,从而提高吞吐量和降低延迟。Flink 提供了简洁的 API,支持有序和无序两种输出模式,并通过 AsyncWaitOperator 实现异步操作。AsyncWaitOperator 内部由 StreamElementQueue 和 Emitter 组成,分别负责管理未完成的请求队列和发送完成的消息。Flink 还通过不同的队列实现方式,确保了消息

SmartSi 283

46、Flink异步 I/O 算子详解

Flink异步 I/O 算子详解

猫猫爱吃小鱼粮 2419

Flink之Asynchronous I/O异步操作

、Asynchronous I/O简介 官网:http://flink.iteblog.com/dev/stream/asyncio.html   将Flink用于流计算时,若涉及到和外部系统进行交互,如利用Flink从数据库中读取数据,这种需要获取I/O的场景时,我们需要考虑交互所带来的时延问题。   为分析如何减少时延,我们先来分析下,Flink以同步的形式方法外部系统(以MapFunction中和数据库交互为例)的过程,若图1虚线左侧所示,请求a发送到database后,MapFuncti.

lixinkuan的博客 1383

Flink使用AsyncDataStream异步处理数据--性能提升效果

共有20条数据,每条数据处理需要2秒,分别使用同步、异步方式处理,共需要多久才能处理完呢

BigManing的博客 1785

flink实战--异步IORichAsyncFunction)解析

简介 我们知道flink对于外部数据源的操作可以通过自带的连接器,或者自定义sink和source实现数据的交互,那么为啥还需要异步IO呢?那时因为对于实时处理,当我们需要使用外部存储数据参与计算时,与外部系统之间的交互延迟对流处理的整个工作进度起决定性的影响。如果我们是使用传统方式mapfunction等算子里访问外部存储,实际上该交互过程是同步的:比如请求a发送到数据...

阿华田的博客 6760

Flink异步AsyncIO的实现 (源码分析)

先上张图整体了解Flink中的异步io 阿里贡献给flink的,优点就不说了嘛,官网上都有,就是写库不会柱塞性能更好 然后来看下, Flink异步io主要分为两种   种是有序Ordered   种是无序UNordered 主要区别是往下游output的顺序(注意这里顺序不是写库的顺序既然都异步了写库的顺序自然是无法保证的),有序的会按接收的顺序继续往下游output发送,...

爱无止 560

flink AsyncWaitOperator 采坑 java.io.EOFException: No more bytes left

AsyncWaitOperator中没有显示使用自定义state,但是AsyncWaitOperator在执行快照时,其实会把异步队列中的数据序列化保存到state中,所以这里显然是input对象中新增了个double类型导致异步数据从state中序列化失败,从而导致从state恢复失败。最终这里去掉@Builder后,重新编译,@Data就能生成无参构造器,符合POJO的规则 ,能够被flink POJO序列化器直接序列化支持扩展,所以这里就是踩了@Builder的坑,

Primary_wind的专栏 1715

多线程篇五——wait和notify

2.使用wait()时没有设置最大等待时间,而sleep()是在知道最大时限的情况下使用(通过异常唤醒,说明程序应该是出现特殊情况了).调用notify()方法后不会立即释放对象锁,要等到执行notify()方法的线程将程序执行完之后【退出同步代码块】才会释放对象锁.notify()要在同步方法或同步块中调用.它会通知可能等待该对象对象锁的其他线程,使得它们重新获取对象锁.1.wait()可通过notify()唤醒,sleep()通过Interrupt()唤醒。wait()方法的大任(唤醒等待的线程).

weixin_72981769的博客 830
上一篇: Spark Structured Streaming源码扩展--(六)流式Shuffle支持多分区及侧边输出
下一篇: Flink源码分析--(二)FLink SQL Window功能
LS_ice
博客等级 码龄16年 70粉丝 20原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值