4

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

Есть ли Флинк, Spark Streaming, Kafka-Streams и Storm также функции детерминированные?

ответ

3

Да и нет. Это зависит;)

Рамки не заставляют вас предоставлять детерминированные функции.

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

Кроме того, это зависит от семантики, которую вы используете.

Flink/Storm (Trident)/Спарк (точно однократной обработки):

  • Flink offeres exaclty однократно только для определенных источников и стоков
  • для этого, некоторые выходные данные будут удалены и пересчитывается в случай отказа
    • Флинк, например, может обрезать файл. Таким образом, вы можете захотеть убедиться в том, что потребительский результат не может быть отменен позже (или вам может быть не все равно ...)
  • Микробиблиотека Spark/Storm автоматически предотвращает последующий вывод потребителя, автоматически (я думаю, что для некоторых раковин, Flink делает то же самое)

Flink/Storm/Кафка-Streams (по-крайней мере, один раз обработки):

  • если вы работаете с по-крайней мере, один раз семантики обработки в случае сбоя, вы получите несколько дубликатов в выводе. Таким образом, если вы используете недетерминированные функции, эти «дубликаты» могут иметь разные значения (из-за недетерминизма)
Смежные вопросы