Функции Apache Flink с отслеживанием состояния пересылают одно и то же сообщение N функциям

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

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

Я думал отправить их по очереди, как показано ниже, но не думаю, что это сработает.

context.send(RemoteFuncType1,someID,someInteger);
context.send(RemoteFuncType2,someID,someInteger);
...
  • как я могу сделать это отказоустойчивым способом?
  • если можно как это работает в фоне?

person Arif Ezberci    schedule 09.05.2020    source источник


Ответы (1)


То, как вы предлагаете это сделать, - правильный путь!

StateFun будет согласованно доставлять сообщения удаленным функциям. Если одна из функций испытывает непродолжительное время простоя, StateFun будет повторять отправку сообщения до тех пор, пока:

  • Он бы успешно доставил его (с откатом)
  • Будет достигнут максимальный тайм-аут для повторных попыток. Когда истечет время ожидания, все задание StateFun будет перемотано к ранее согласованной контрольной точке.

Поскольку StateFun управляет доставкой сообщений и состоянием функций (включая удаленные), он должен гарантировать, что согласованное состояние и сообщение будут доставлены каждой функции. В вашем примере: вторая удаленная функция получит someInteger с любым состоянием, которое она имела раньше, после восстановления.

Чтобы лучше понять, как работает контрольная точка во Flink и как она обеспечивает единовременную обработку, я бы порекомендовал следующее:

https://ci.apache.org/projects/flink/flink-docs-stable/internals/stream_checkpointing.html.

person Igal    schedule 10.05.2020
comment
Для ситуаций, связанных с порядком, восстанавливается ли функция дистанционного управления целыми числами по порядку? - person Arif Ezberci; 10.05.2020
comment
Да, сообщения будут доставляться в порядке FIFO. - person Igal; 10.05.2020