1.通过监控,发现操作耗时,hbase get 操作耗时在10-20ms,高的时候能达到40-50ms,低的时候10ms以内
2.解决方案
采用flink 异步io 优化代码
final long timeout = 40000; AsyncFunction<String, String> function = new AlbumAsyncFunction(); DataStream<String> resultStream = AsyncDataStream.unorderedWait( sourceStream, function, timeout, TimeUnit.MILLISECONDS, 10).filter(new FilterFunction<String>() { @Override public boolean filter(String s) throws Exception { if (StringUtils.isNotBlank(s)) { return true; } else { return false; } } }).setParallelism(50);
(1)应用async I/O转换,设置等待模式、超时时间、以及进行中的异步请求的最大数量
(2)AsyncDataStream提供了两种调用方法,分别是orderedWait和unorderedWait,这分别对应了有序和无序两种输出模式。
3.异步io 思路
具体内容参考:
4.最后优化结果