【问题标题】:Is it possible use composite triggers in conjunction with micro-batching with dataflow?是否可以将复合触发器与带有数据流的微批处理结合使用?
【发布时间】:2020-04-21 08:38:47
【问题描述】:

我们有一个无限的 PCollection PCollection<TableRow> source 插入到 BigQuery。

每 500,000 条消息或 5 分钟触发一次窗口的简单“按规定”方法是:

source.apply("GlobalWindow", Window.<TableRow>into(new GlobalWindows())
    .triggering(Repeatedly.forever(AfterFirst.of(
         AfterPane.elementCountAtLeast(500000),
         AfterProcessingTime.pastFirstElementInPane().plusDelayOf(Duration.standardMinutes(5))))
     ).withAllowedLateness(Duration.standardMinutes(1440)).discardingFiredPanes())

您会认为将以下内容应用于触发的窗口/窗格将允许您将触发的窗格的内容写入 BigQuery:

.apply("BatchWriteToBigQuery", BigQueryIO.writeTableRows()
.to(destination)
.withMethod(BigQueryIO.Write.Method.FILE_LOADS)
.withNumFileShards(NUM_FILE_SHARDS)
.withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED)
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND));

但这会产生编译错误An exception occured while executing the Java class. When writing an unbounded PCollection via FILE_LOADS, triggering frequency must be specified

相对简单的解决方法是将.withTriggeringFrequency(Duration.standardMinutes(5)) 添加到上面,这实际上会使每五分钟插入条消息或每N条消息的想法完全无效,在这种情况下,你也可以摆脱窗口。

有没有办法真正做到这一点?

【问题讨论】:

    标签: apache-beam dataflow


    【解决方案1】:

    FILE_LOADS 需要触发频率。

    如果您想要更多实时结果,可以使用STREAMING_INSERTS

    参考https://beam.apache.org/releases/javadoc/2.19.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.Write.Method.html#FILE_LOADS

    【讨论】:

    • 所以你的回答是,不,不可能每 N 个元素或每 N 分钟触发一次FILE_LOADS?因为我的问题中已经包含了你的答案。
    • FILE_LOAD 的答案是否定的。但是,我的回答意图是提供一个替代方案,即 STREAMING_INSERT,因为它没有包含在问题中。
    • @ChristianW。 - 正如 Ankur 提到的,您的代码中发生了两件独立的事情。 1. 有基于触发器逻辑以特定频率发出窗格的逻辑,以及 2. 有一个单独的逻辑将这些发出的行写入 Bigquery。如果您想让触发逻辑控制写入 Bigquery,则需要使用 STREAMING_INSERT。如果您希望有一个独立的逻辑以特定频率写入,而这与窗格的生成方式无关,那么 FILE_LOADS 方法将为您解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    相关资源
    最近更新 更多