繁体   English   中英

Apache Beam:我的用例需要什么触发器

[英]Apache Beam: What trigger do I need for my use case

我正在编写一个 Google Dataflow 作业,它从 Pub/Sub 主题读取 JSON,类似于以下内容。

{
    "viewing_id": 1000,
    "viewing_created_at": "2022-12-01 14:30:00 UTC"
}

在转换过程中,我设置了 window 时间戳如下。 在 JSON 读取步骤中,我的元素将时间戳设置为来自 viewing_created_at 日期时间的 unix 时间戳 int。

| 'Timestamp' >> beam.Map(lambda viewing: beam.window.TimestampedValue(viewing, viewing.timestamp))

以上所有方法都有效,但我不确定要为我的用例设置窗口,而且我发现文档有点难以理解。 https://beam.apache.org/documentation/programming-guide/#event-time-triggers

我想在 window 结束后触发结果的发出,再加上 5 分钟的延迟。 发布到主题的脚本在创建查看后立即触发,因此发布和数据流读取之间可能会有几秒钟的延迟。 所以我想等5分钟再处理数据。 我不关心之后发生的任何事情。

这是我到目前为止...

    | beam.WindowInto(
                        window.FixedWindows(15),
                        trigger = AfterWatermark(),
                        allowed_lateness = 0,
                        accumulation_mode = AccumulationMode.DISCARDING
                    )

我阅读了AfterWatermark.pastEndOfWindow但不确定如何实现它也不知道如何设置延迟。

需要明确的是,我只想每 window 触发一次。我想等待一定时间并汇总到目前为止收集的结果,而忽略其他任何内容。

需要明确的是,我只想每 window 触发一次。我想等待一定时间并汇总到目前为止收集的结果,而忽略其他任何内容。

以下代码适用于固定 window 的 15 分钟,延迟数据允许在 window 结束后最多 5 分钟。

对于早期和准时数据,每 window 触发一次,对于任何晚期数据,在水印之后,事件计数为 1 时触发。

任何超过 5 分钟的延迟地平线都将被丢弃。

    | "WindowBy15Minutes" >> beam.WindowInto(beam.window.FixedWindows(60*15), # 15 minutes
                            trigger=Repeatedly(AfterWatermark(late=AfterCount(1))),
                            allowed_lateness=(60*5), # 5 minutes
                            accumulation_mode=AccumulationMode.DISCARDING)

编辑:

默认触发行为是,当水印已经超过 Window 的末尾时,它会触发一次。在这种情况下,迟到的数据会被简单地丢弃。

trigger=Repeatedly(AfterWatermark())

为了处理延迟数据,我们引入了延迟范围,它是使用allowed_lateness定义的。 在您的情况下,允许延迟数据最多 5 分钟 - 这意味着,在水印超过 window 的末尾之后,每个 window 打开 5 分钟。

trigger=Repeatedly(AfterWatermark(late=AfterCount(1))),
                    allowed_lateness=(60*5))    

    

我们添加了AfterCount(1)以在接收到一些数据后立即获得推测结果,而无需等待整个 window 时间,您也可以指定处理时间,如AfterProcessingTime() ,您可以跳过它,因为您需要每 Window 一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM