Я работаю над потоковым конвейером Java Apache Beam (2.13.0), который работает в облачном потоке данных Google.У меня давно работает PTransform (для одного входа он выполняет много работы, выводит несколько выходов и может занимать> 10 минут).
Я хочу вернуть пользователю ранние результаты обработки.У меня есть шаг Window and Combine после этого.Ранние триггеры, похоже, не работают с долго работающим PTransform.Шаг Объединить выводит элементы после того, как PTransform заканчивает обработку элемента (а не возвращает ранние результаты).
Я пробовал много разных ранних оконных функций.Например, я попытался сделать триггеры счетчика элементов навсегда, и это не работает.То же самое для вечной обработки триггеров, основанных на времени (например, каждые 10 секунд обработки).Я пробовал GlobalWindows, Fixed Windows, Session Windows и т. Д.
Вот грубый псевдокод для того, что я делаю.
p.apply(PubsubIO.readStrings().fromSubscription(options.getInput()));
.apply(FlatMapElements.via(new LongRunningCalculation()))
.apply(<I've tried a variety of window functions>)
.apply(Combine.perKey(new SumMetrics()))
.apply(DatastoreIO.v1().write().withProjectId(options.getProject()));
Для функций Window я пробовалмного разных оконных функций, чтобы посмотреть, смогу ли я получить что-нибудь, чтобы вернуться рано.Я не могу заставить его вернуться рано.
Вот основной.
Window.into(new GlobalWindows())
.triggering(Repeatedly.forever(AfterPane.elementCountAtLeast(10)))
.withAllowedLateness(Duration.ZERO)
.discardingFiredPanes());
Даже для этого, даже если Окно добавило >> 10 элементов, GroupBy вшаг объединения не выводит никаких строк.
Ожидается: если у меня будет длительное выполнение PTransform, я все еще ожидаю, что ранние триггеры все еще будут срабатывать.
Фактически: я не могузаставить ранние триггеры работать.
Любой совет?