0

Flink Stateful Functions 2.0 能够进行异步调用,例如对外部 API:[ https://ci.apache.org/projects/flink/flink-statefun-docs-release-2.0/sdk/java.html#完成异步请求][1]

然后暂停函数执行,直到调用完成并显示 Success、Failure 或 Unknown。未知的是:

在 CompletableFuture 完成之前,有状态函数可能在另一台机器上重新启动,因此不知道异步操作的状态是什么。

当暂停/等待函数再次调用具有相同 ID 的调用时会发生什么?

  1. 然后被调用者是否等待被调用函数对其异步结果的处理,以便第二次调用以干净、非共享的异步后状态执行?
  2. 或者第二个调用是否按正常计划执行,因此在异步调用的当前状态之上,然后当异步调用完成时,它继续使用在异步调用挂起时更新的状态进行处理?
  3. 或者调用算作被调用函数的“重启”——在这种情况下,执行顺序是什么:“重启”运行,然后异步返回“重启”以从现在更新的状态执行,或者这个顺序是颠倒的?
  4. 或者是其他东西?
4

1 回答 1

2

异步请求完成时,函数执行不会暂停。该 ID 的实例将继续处理消息,直到请求完成。这意味着状态可以在未来运行时发生变化。

将您的未来想象成一个临时功能,您可以发送消息,然后在有结果时向您发送消息。函数可以毫无问题地产生多个异步请求。无论哪个未来先完成,函数实例都会首先处理,不一定是它们产生的顺序。

于 2020-04-19T21:20:02.480 回答