学习资料 – 第六章 Flink编程模型与API 枫叶云笔记 (fynote.com)
异步IO机制原理

在Flink中使用异步I/O,我们可以连续发送多个查询请求到数据库,并在回复返回时处理每个回复,而不需要阻塞等待,这种并发处理的方式极大地减少了延迟
在Flink中查询外界数据库数据时要使用异步IO需要满足如下条件之一:
数据库(或K/V存储系统)提供支持异步请求的客户端,例如Java的Vertx。
对于不支持异步请求客户端的外部系统可以使用线程池模拟异步客户端。
Flink Async I/O 输出提供乱序和顺序两种模式,异步IO实现方法分别为:orderedWait和unorderedWait,两种方法都有5个参数,解释如下:
第一个参数是输入数据流;
第二个参数是异步IO的实现类,该类需要继承RichAsyncFunction抽象类。
第三个参数是用于完成异步操作超时时间;
第四个参数是超时时间单位;
第五个参数可以触发的最大异步i/o操作数;
Flink中使用异步IO时,代码逻辑如下:
#创建原始数据流
DataStream<String> stream = ...;
#使用Flink异步IO - 顺序输出(每个task中)
DataStream<Tuple2<String, String>> resultStream = AsyncDataStream.orderedWait(stream, new AsyncDatabaseRequest(), 1000, TimeUnit.MILLISECONDS, 100);
#使用Flink异步IO - 乱序输出
DataStream<Tuple2<String, String>> resultStream = AsyncDataStream.unorderedWait(stream, new AsyncDatabaseRequest(), 1000, TimeUnit.MILLISECONDS, 100);