Apache Beam 无界管道窗口化

问题描述 投票:0回答:1

我有一个在 Dataflow 中运行的无界 Apache Beam 管道,它执行一组非常简单的指令:

  1. 它读取发布订阅消息 (PubsubIO)
  2. 它从消息中提取时间戳,从 BigQuery 中提取数据,将结果解析为 KV 值 (DoFn)
  3. 将数据窗口化为3秒的固定窗口(Window PTransform)
  4. 按键分组(Ptransform)
  5. 一个名为 SplitterLogicFn (DoFn) 的 DoFn

我希望看到的是,当第 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()))

我错过了什么?

java google-cloud-dataflow apache-beam
1个回答
0
投票

我认为你在这里缺少触发器,它会告诉 Beam 窗口何时真正触发,而不仅仅是它们将如何组合在一起(窗口)。

看看https://beam.apache.org/documentation/programming-guide/#setting-a-trigger.

© www.soinside.com 2019 - 2024. All rights reserved.