Как создаются пакеты потока данных после GroupBy / Combine? - PullRequest
3 голосов
/ 06 марта 2019

Настройка:

чтение из pubsub -> окно 30 с -> группировка по пользователю -> объединение -> запись в облачное хранилище данных

Проблема:

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

Вопрос:

  1. Я хочу понять, как мой конвейер объединяет результаты в пакеты после операции группировки / объединения.Я ожидал бы, что пакет будет создан для каждого окна после объединения.Но, по-видимому, пакет может содержать более 2 вхождений одного и того же пользователя?

  2. Может ли повторное выполнение (повторные попытки) пакетов вызвать такое поведение?

  3. Зависит ли этот комплект от бегуна?

  4. Возможна ли дедупликация?если да, то как мне лучше всего подойти к этому?

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

1 Ответ

1 голос
/ 09 марта 2019

На ваш вопрос есть два ответа.Один специфичен для вашего случая использования, а другой - в основном для пакетирования / создания окон в потоковой передаче.


Специфично для вашего конвейера

Я предполагаю, чтоключом для хранилища данных является идентификатор пользователя?В этом случае, если у вас есть события от одного и того же пользователя в более чем одном окне, ваши операции GroupByKey или Combine будут иметь один отдельный элемент для каждой пары user + window.

Так что вопрос: Что вы пытаетесь вставить в хранилище данных?

  • Результирующий агрегат отдельного пользователя за все время ?В этом случае вам нужно будет использовать глобальное окно.
  • Полученный в результате агрегат пользователя за каждые 30 секунд?Затем вам нужно использовать окно как часть ключа, который вы используете для вставки в хранилище данных.Это помогает / имеет смысл?

Рад помочь вам спроектировать ваш конвейер так, как вы хотите.Поговорите со мной в комментариях или через SO-чат.


Большой вопрос о связывании данных

Стратегии связывания будут варьироваться в зависимости от участника.В потоке данных вы должны учитывать следующие два фактора:

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

* - когда может внезапно начаться скачок свежести данных?Поток с одним элементом с очень старой временной меткой, который обрабатывается очень медленно, может долго удерживать водяной знак.После обработки этого элемента водяной знак может сильно перепрыгнуть к следующему самому старому элементу ( Ознакомьтесь с этой лекцией по водяным знакам;) ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...