Flink Stateful Functions 2.0 Несколько вызовов во время асинхронного ожидания - PullRequest
0 голосов
/ 19 апреля 2020

Flink Stateful Functions 2.0 может выполнять асинхронные вызовы, например, на внешний API: [https://ci.apache.org/projects/flink/flink-statefun-docs-release-2.0/sdk/java.html#completing -asyn c -requests] [1] .

Выполнение функции затем приостанавливается до тех пор, пока вызов не завершится с помощью «Успешно», «Сбой» или «Неизвестно». Неизвестно:

Функция с сохранением состояния была перезапущена, возможно, на другом компьютере до завершения CompletableFuture, поэтому неизвестно, каково состояние асинхронной операции.

Что происходит, когда происходит второй вызов с тем же идентификатором для функции приостановки / ожидания?

  1. Затем вызываемый абонент ожидает обработки вызываемой функцией своего асинхронного c результата, чтобы это Второй вызов выполняется с чистым нераспределенным состоянием post-asyn c?
  2. Или второй вызов выполняется по обычному расписанию и, таким образом, поверх состояния, которое было текущим на момент асинхронности c вызов, а затем, когда вызов asyn c завершается, он продолжает обработку, используя состояние, которое было обновлено, пока ожидался вызов asyn c?
  3. Или, возможно, этот вызов считается «перезапуском» вызываемая функция - в этом случае каков порядок выполнения: запускается «restart», а затем asyn c возвращается с «restart» для выполнения из сейчас обновленное состояние, или этот порядок перевернут?
  4. Или что-то еще?

1 Ответ

2 голосов
/ 20 апреля 2020

Выполнение функции не приостанавливает , пока асинхронный запрос c завершается. Экземпляр для этого идентификатора будет продолжать обрабатывать сообщения, пока запрос не будет завершен. Это означает, что состояние может измениться во время работы будущего.

Думайте о своем будущем как о ad-ho c функции, которую вы отправляете, и которая затем отправляет вам ответное сообщение, когда оно дает результат. Функции могут порождать несколько асинхронных запросов без проблем. В зависимости от того, какое будущее завершится первым, сначала будет обработан экземпляр функции, а не обязательно порядок, в котором они были созданы.

...