Apache Beam Обновление записей - Latest.perKey с закрытием окна при запуске нового - PullRequest
0 голосов
/ 21 февраля 2019

Мне не удается найти подходящую стратегию управления окнами для моих текущих потребностей, используя Apache Beam с Java, развернутый в потоке данных Google.

TLDR

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

Пояснение

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

Теперь я хочу сохранить эти обновления в базе данных Firestore, где мне нужна гарантия, что у меня всегда естьПоследняя версия.Поскольку несколько обновлений одной и той же записи могут происходить в непосредственной близости, я хотел бы объединить обновления и выбрать только самые последние.

Группа операций по 101 * * помогает здесь, но работа с окнами по-прежнему проблематична.

Проблема в том, что я хочу, чтобы ключ Latest.perKey был глобальным, а не для каждого окна.Таким образом, я могу использовать фиксированную / скользящую / сеансовую Windows, но мне нужно закрыть эти окна не по задержке, а по запуску нового окна.

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

Есть ли способ сделать это с помощью стандартных окон?

FixedWindow или Sessions кажутся несколько уместными, но я не вижу способа отменить предыдущие окна при запуске нового.

Я мог бы использовать чтение перед записью и полностью избавиться от окна., но я стараюсь не увеличивать количество операций чтения Firestore на огромное количество.

...