【FLINK】实时流读取维表(二)Async I/O

1、aysnc i/o 的设计

The following diagram illustrates how the streaming records are processed while

  • arriving at AsyncWaitOperator
  • recovering from task failover
  • snapshotting state
  • being emitted by Emitter Thread

来源:FLIP-12: Asynchronous I/O Design and Implementation - Apache Flink - Apache Software Foundation

1.1、程序设计图

1.2时序图:

2.、Sync I/O 与 Async I/O

我们都知道同步跟异步的区别,异步唯一的好处是不需要等待返回的结果就可以继续运行剩下的逻辑,等异步结果返回时再告知程序即可。如图所示:

 3、使用Async I/O的条件

  • 对数据库(k/v 存储)实现Async I/O 需要数据源支持客户端异步请求
  • 如果不支持,也可以尝试使用线程池来处理异步请求,不过这种情况通常是比能支持异步请求客户端的差一些

4、实践

4.1、接入kafka source

//kafka source
        DataStream<String> kafkaStream = SourceUtils.kafkaSourceUtils(env, kafkaProperties, "test_online");
        SingleOutputStreamOperator<MediaEntity> mediaSource = kafkaStream
                .map(v -> JSON.parseObject(v, MediaEntity.class)).setParallelism(1)
                .name("async-kafka-convert-media-map");

4.2、调用 AsyncDataStream

这里有有序跟无须的方法选择,可以根据自己的要求调用,我这里调用的是无序的因为丰富的数据流跟时间没有关系

 一共有五个参数,五个不填的时候默认数量是100

 4.2、主要是实现一个AsyncFunction

里面有两个重写的方法asyncInvoketimeout,一个是实现异步的逻辑,一个是超时未返回可以编写自定义的逻辑代码

AsyncDataStream.unorderedWait(mediaSource,
                new AsyncFunction<MediaEntity, MediaEntity>() {
                    @Override
                    public void asyncInvoke(MediaEntity input, ResultFuture<MediaEntity> resultFuture) throws Exception {
                        
                    }

                    @Override
                    public void timeout(MediaEntity input, ResultFuture<MediaEntity> resultFuture) throws Exception {

                    }
                },
                6000,
                TimeUnit.MILLISECONDS,
                3)
                .setParallelism(1)
                .name("async_query_from_mysql");

4.3、返回datastream 结果

异步的结果返回时会直接返回成datastream的结果

//3、返回结果
        completableFuture.thenAccept((MediaEntity m) -> resultFuture.complete(Collections.singleton(m)));

5、结果

整体下来达到了预期

 

具体数据及代码请查看github(如果可以,请点一下star⭐️,谢谢支持):

async I/Oflink-learning/ASyncIOMain.java at main · BiGsuw/flink-learning · GitHub

参考文章:Async I/O | Apache Flink

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zsigner

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值