Обработка с отслеживанием состояния в Beam — используется ли состояние для всех оконных панелей?

Apache Beam недавно представил ячейки состояний с помощью аннотаций StateSpec и @StateId с частичной поддержкой в ​​Apache Flink и Google Cloud Dataflow.

Мой вопрос касается сборки мусора состояния в случае, когда DoFn с отслеживанием состояния используется в оконном потоке. Обычно состояние удаляется (сборщик мусора) бегуном по истечении срока действия окна (т. Е. Водяной знак проходит через конец окна). Однако рассмотрим случай, когда оконные панели срабатывают раньше, а сработавшие панели отбрасываются:

input.apply(Window.<MyElement>into(CalendarWindows.days(1))
  .triggering(AfterWatermark.pastEndOfWindow()
  .withEarlyFirings(
    AfterProcessingTime.pastFirstElementInPane()
      .plusDelayOf(Duration.standardMinutes(10))
  ))
  .discardingFiredPanes()
  .apply(ParDo.of(new MyStatefulDofn()));

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

См. также:  Запуск конвейера Apache Beam в проекте Spring Boot в потоке данных Google
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Josh

    Ваша конфигурация запуска не влияет на то, как выполняется обработка ParDo с отслеживанием состояния. Элементы сразу же передаются вашему DoFn без какой-либо буферизации / запуска, и ваш DoFn напрямую контролирует, когда происходит вывод.

    Тот факт, что вы управляете выводом, является важным различием между ParDo обработкой с сохранением состояния и Combine.perKey управляемой триггерами. Вот почему ParDo с отслеживанием состояния часто является хорошим выбором, когда триггеры недостаточно богаты для вашего варианта использования.

    Я сравниваю обработку ParDo с отслеживанием состояния с триггерами Combine + более подробно в моем сообщении в блоге Beam: https://beam.apache.org/blog/2017/02/13/stateful-processing.html

    Теперь, если есть GroupByKey или Combine.perKey где-то выше по течению от вашего ParDo с отслеживанием состояния, тогда элементы ввода будут связаны с некоторым запуском триггера из восходящего потока. Но это не влияет на управление состоянием ParDo с отслеживанием состояния. Поскольку состояние сохраняется для всех элементов, а «панель» — это просто элемент, состояние сохраняется до тех пор, пока окно не истечет полностью.

    Между прочим, очень хорошее резюме, ведущее к вашему вопросу!

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: