文章目录
一、异步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代码示例在AsyncIOExa