我有一个在 Dataflow 中运行的无界 Apache Beam 管道,它执行一组非常简单的指令:
我希望看到的是,当第 2 步开始产生数据时,每个 KV 将在当前 3 秒固定窗口中一起被标记,以便它可以在第 4 步中与第 2 步中定义的键一起被批处理。然而,什么我看到数据没有流过 GroupByKey 步骤(见下图),这对我来说意味着我没有正确设置窗口。
p.apply("Reading input",
PubsubIO.readMessages()
.fromSubscription(INPUT_SUBSCRIPTION)
.withDeadLetterTopic(DL_TOPIC))
.apply("Reading data",
ParDo.of(new ReadPlanFromBqFn()))
.apply(Window.into(FixedWindows.of(Duration.standardSeconds(3))))
.apply(GroupByKey.create())
.apply("Splitting store/item combinations",
ParDo.of(new SplitItemCombos()))
我错过了什么?
我认为你在这里缺少触发器,它会告诉 Beam 窗口何时真正触发,而不仅仅是它们将如何组合在一起(窗口)。
看看https://beam.apache.org/documentation/programming-guide/#setting-a-trigger.