Flink之AsyncDataStream

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

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

Flink 在1.2中引入了Async I/O,在异步模式下,将IO操作异步化,单个并行可以连续发送多个请求,哪个请求先返回就先处理,从而在连续的请求间不需要阻塞式等待,大大提高了流处理效率。

也就是要介绍的AsyncDataStream

首先AsyncDataStream 有两个方法1.unorderedWait表示数据不需要关注顺序,处理完立即发送 方法需要传入的第一个参数是一个datastream 这也是和其他的算子不太一样的地方 这里的两个方法需要用AsyncDataStream调用把上游datastream作为参数传递  而不是datastream直接调用 第二个参数 就是自己实现的类。需要继承 RichAsyncFunction或者 AsyncFunction 当然 因为基础方法 没有生命周期函数 但是这个方法 主要用来和外部系统交互。所以 一般都会去继承RichAsyncFunction第三个参数 是最长等待时间  第四个参数 是一个TimeUnit  可以传入 入  TimeUnit.SECONDS这种 最后一个参数Capacity表示同时最多有多少个异步请求在处理,异步IO的方式会导致更高的吞吐量,但是对于实时应用来说该操作也是一个瓶颈。限制并发请求数,算子不会积压过多的未处理请求,但是一旦超过容量的显示会触发背压。
该参数可以不配置,但是默认是100。

2.orderedWait表

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值