Трубопровод Google Dataflow застрял на GroupByKey - PullRequest
0 голосов
/ 01 ноября 2019

Кажется, что есть много похожих вопросов / проблем, связанных с зависанием конвейера Beam в GroupByKey, но после целого дня пробования различных настроек для триггеров PubSubIO и Window я все еще не пошел дальше.

У меня есть тема PubSub, производящая постоянный поток данных: enter image description here При запуске моего конвейера в потоке данных добавляются несколько элементов. В дальнейшем количество элементов остается неизменным. Водяной знак данных медленно увеличивается и на 10-11 минут отстает от текущего времени, что совпадает со временем хранения сообщений подписки PubSub, равным 10 минутам. Я пробовал разные установки для чтения PubSub, с атрибутами и без них, добавлением метки времени самостоятельно и т. Д. В этой работе это просто чтение ванили без атрибутов, полагающихся на Google для вычисления меток времени.

Здесь я пытаюсьчтобы запустить мой конвейер, который не выполняет группировку по ключу: enter image description here Я перепробовал множество настроек Window. Мои цели - это скользящее окно продолжительностью 30 минут каждую 1 минуту, но здесь я просто пытаюсь заставить его работать с фиксированным окном в 1 минуту. Я также пробовал много разных триггеров с добавлением как раннего, так и позднего включения. В этой работе я ничего не указывал, т.е. он должен использовать триггер по умолчанию.

Идентификатор задания: 2019-11-01_06_38_28-2654303843876161133

Есть ли у кого-нибудь какие-либо предложения о том, что еще я могу попытаться получить какой-либо элемент через GBK?

Обновление:

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

У меня есть атрибут сообщения PubSub, который я использую как метку времени (.withTimestampAttribute(...)). Регистрация timestamp() в ProcessContext дает правильную метку времени и назначение окна. Сообщения передаются в режиме реального времени с задержкой в ​​пару секунд, но проблема в том, что «водяной знак данных» остается некоторое время (наблюдается около 1,5 часов), и поэтому окно никогда не срабатывает, а GroupByKey не работает.

Если я опускаю .withTimestampAttribute(...) при чтении из PubSub, кажется, что все работает правильно, но у меня есть задержка с моей отметкой времени, из-за которой во многих случаях сообщения назначаются более позднему окну.

Я нашел обходной путь, вызвав время обработки вместо времени события, но я не оценил, является ли это реальным решением:

.triggering(AfterProcessingTime.pastFirstElementInPane().alignedTo(Duration.standardMinutes(1)).plusDelayOf(Duration.standardMinutes(1)))
.withAllowedLateness(Duration.ZERO)    
.discardingFiredPanes()

Вопрос в том, как я могу убедиться, что водяной знак обновляется при чтениииз PubSub с использованием атрибута timestamp?

...