在谈论 Flink 异步 IO 时,“容量”参数是什么?

gfy*_*ytd 7 apache-flink

使用 Flink AsyncDataStream#unorderedWait 时,有一个名为“capacity”的参数,引用自 flink 官方文档,

容量:该参数定义可以同时进行多少个异步请求。尽管异步 I/O 方法通常会带来更好的吞吐量,但运算符仍然可能是流应用程序中的瓶颈。限制并发请求数量可以确保操作员不会积累不断增长的待处理请求积压,但一旦容量耗尽就会触发背压。

我不太明白,是为了整个工作,还是为了子任务?

假设我的玩具 flink 应用程序使用一个 kafka,对于每个 kafka 消息,它都会发出一个 http 请求,当它收到 http 响应时,它将它下沉到另一个 kafka 主题。

而在这个例子中,kafka源的并行度为50,如果我将'容量'设置为10,这意味着什么?这是否意味着整个应用程序最多同时发出 10 个 http 请求?或者,每个子任务 10 个 http 请求(最多同时产生 500 个 http 请求)?

另一个问题是,在这种情况下设置“容量”的最佳实践是什么?

非常感谢!

Dav*_*son 9

容量是异步 I/O 运算符的每个实例的容量。因此,在您的示例中,最多有 500 个并发 http 请求。

您可能需要进行一些基准测试实验,以了解平衡您的用例的权衡的意义。如果容量太小,那么在负载下,您可能会过早地产生背压;如果容量太大,那么在负载下,您可能会压垮外部服务,导致超时或其他错误。