flink数据挤压积压_详解 Flink 异步 IO

本文介绍了Flink为解决与外部系统交互的网络延迟问题引入的异步IO特性,通过AsyncFunction和callback实现高效并发处理,提高系统吞吐量。详细阐述了异步IO的工作原理、消息顺序性以及快照与恢复机制,帮助理解如何在实时数仓场景中优化Flink的性能。
摘要由CSDN通过智能技术生成

634436b4-225a-eb11-8da9-e4434bdf6706.png

为了避免Flink与外部系统进行交互时候的网络延迟成为系统的瓶颈,Flink在1.2版本引入了Async I/O (Async I/O 是阿里贡献给社区的一个呼声很高的特性)。

在构建实时数仓等应用场景下,与外部 维表等的关联需要大量的和外部存储的交互,此时,一定要仔细处理,不能让Flink与外部之间的交互延迟成为整个实时计算的瓶颈。

本文阐述了如何使用Flink Api来与外部数据存储等进行异步交互。

当编程时使用mapfunction等算子访问外部存储时,默认的交互过程是同步的,即发送数据请求到外部存储并获得返回数据这段时间内,mapfunciton等算子会一直处于等待而无法处理新的数据流,这个等待的过程是非常浪费计算资源以及处理时间的。

在与外部数据源进行交互时,flink的单个算子可以并发处理多个请求并处理返回的相应,这样的话,之前的等待的时间由于发送了其他请求并处理了外部存储返回的结果,整体来看均摊到每个请求的时间大幅度降低,计算资源的利用率也得到了提升, 系统整体可以达到更高的吞吐量。

如下图所示,左侧为同步I/O,右侧为异步I/O。

3b08544974b07b67f6d710784c61e495.png
同步与异步示意图

在使用Flink异步I/O 有个非常重要的前提,就是所访问的外部存储支持异步请求,值得高兴的是,当前主流的存储引擎均支持异步请求。如果所请求的外部存储不支持异步请求,那么可以同时创建多个同步请求并放到线程池中(该种方法相对于直接使用异步请求来说更加低效)。上面这个过程听起来挺复杂,但是在实际使用时,Flink均为我们提供了非常便捷的API,这样的话,我们只需要关注具体的业务逻辑,其他的异步请求发出以及返回结果存储等均由框架帮我们完成。

那么具体如何使用flink异步I/O ?下面 为 Flink官网所推荐的使用方法

/** AsyncFunction实现样例 ,通过向数据库发送异步
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值