作为Flink Async IO
运算符是为外部api或db调用而设计的,是否有任何特定的准则/提示来扩展此运算符?特别是对于以非常高的速度接收传入事件和使用异步io操作符的用例 orderedWait
模式不能跟上这个速度(尽管它调用的目标api端点经过负载测试,以提供更高的吞吐量和最小的延迟)。在我们的例子中 Async IO
管道运营商将吞吐量降低了88%至90%。这是巨大的性能打击!
我们试过几件事:
增加 async buffer capacity
参数,通过增加在任何给定时间点等待响应的并发请求的数量来实现。事实证明,超过50或100这样一个非常小的数字反而会适得其反。
增加运算符并行性。这并没有多大帮助,因为我们机器上的内核数量有限(8或12个)
调整 AsyncHTTPClient
配置( keepAlive=true, maxConnections, maxConnectionsPerHost
)以及未来侦听器使用的fixedthreadpool的大小。又一次没有多大改善。
我们的观察结果是 Async IO
操作符一次只处理一个流元素,操作符及其底层的http客户机是多线程的,需要更高的核心机器来进行高速流处理。如果这类应用程序只能使用8到16核的机器,那么我们在满足所需的吞吐量和延迟sla方面将面临挑战。
是否有任何微基准或调整指南可供使用 Async IO
对于高速流处理,那么我们知道它的吞吐量是多少?
暂无答案!
目前还没有任何答案,快来回答吧!