Apache flink Flink-用于一系列API调用的异步IO运算符

Apache flink Flink-用于一系列API调用的异步IO运算符,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我们使用异步IO操作符来调用外部API。到目前为止,每个事件只有一个api调用。但是,我们需要为每个事件引入多个API调用。在操作符中使用线程并在一系列中进行调用确实提供了一个解决方案,但这是否违背了使用异步IO的目的?。使用线程会导致其他问题吗?您现在实际使用的是asyncIOasyncIO不会自行生成任何线程,但希望用户代码直接或间接生成线程 有两个主要用例: 1) 在使用的库返回结果的地方使用外部回调。例如,使用mongodb的反应式API。 2) 维护自定义线程池(例如,使用Execut

我们使用异步IO操作符来调用外部API。到目前为止,每个事件只有一个api调用。但是,我们需要为每个事件引入多个API调用。在操作符中使用线程并在一系列中进行调用确实提供了一个解决方案,但这是否违背了使用异步IO的目的?。使用线程会导致其他问题吗?

您现在实际使用的是
asyncIO
asyncIO
不会自行生成任何线程,但希望用户代码直接或间接生成线程

有两个主要用例: 1) 在使用的库返回结果的地方使用外部回调。例如,使用mongodb的反应式API。 2) 维护自定义线程池(例如,使用
Executors.newFixedThreadPool
)并使用它手动实现异步操作

您正在使用第二种方法


如果不使用任何一种方法,
asyncIO
只是一个缓慢的
映射

非常感谢您的回答。我用线程探查器验证了这一点,新生成的线程处理一个事件的一系列API调用,并进入IO状态。我想知道我是否会打破任何东西。因此,question.IO状态正是您想要的。IO状态表示它正在等待网络流量到达。等待状态意味着它处于空闲状态(等待Flink调用它)。你可以增加你的线程池,直到你看到一些空闲的线程(那么你就接近了最佳点)。非常感谢。我一定会试试看!另一方面,假设我们必须在随后的另一个调用中使用一个API调用的结果,使用单个线程是否仍会使Flink在执行调用时将其视为等待IO的线程,从而为其他事件释放处理时间。没有Flink不检查线程状态,也不知道用户代码做了什么
asyncIO
只是收集异步调用的输出,将它们按顺序排列(如果已配置),并确保正确插入水印。没有其他的黑魔法。因此,如果您希望独立处理这两个调用,则必须使用双链
asyncIO
。谢谢@Arvid Heise