Flink 1.6异步IO-如何使用REST服务调用丰富流时提高吞吐量?

时间:2018-08-31 15:05:27

标签: apache-flink

我当前正在使用Flink 1.6版,并且遇到AsyncIO的问题,其中性能未达到我的期望。

我确信我在实现过程中做错了事,因此任何建议/建议将不胜感激。

问题简介- 我正在消耗ID流。 对于每个ID,我需要调用REST服务。 我已经实现了RichAsyncFunction,它可以执行异步REST调用。

这是相关的代码方法和asyncInvoke方法

// these are initialized in the open method
ExecutorService executorService = 
ExecutorService.newFixedThreadPool(n);
CloseableHttpAsyncClient client = ...
Gson gson = ...

public void asyncInvoke(String key, final ResultFuture<Item> resultFuture) throws Exception {

    executorService.submit(new Runnable() {

        client.execute(new HttpGet(new URI("http://myservice/" + key)), new FutureCallback<HttpResponse>() {
             @Override
                public void completed(final HttpResponse response) {
                    System.out.println("completed successfully");
                    Item item = gson.fromJson(EntityUtils.toString(response.getEntity), Item.class);
                    resultFuture.complete(Collections.singleton(item));
                }
        });
    });

}

通过上述实现,我已经尝试过:-

  • 提高浓缩操作的并行度
  • 增加执行程序服务中的线程数
  • 使用apache http异步客户端,我尝试调整连接管理器设置-setDefaultMaxPerRoute和setMaxTotal。

我一直获得约100个请求/秒的吞吐量。该服务每秒可以处理超过5k。 我在做什么错了,我该如何改善呢?

0 个答案:

没有答案