google-cloud-dataflow - Google Cloud Dataflow 窗口化数据和分组
问题描述
我有一个管道,它从 PubSub 获取事件流,应用 1h 窗口,然后将它们写入 Google Cloud Storage 上的文件。最近我意识到有时在 1 小时的窗口中会出现太多事件,所以我还添加了一个触发器,如果窗格中的事件超过 100k 个则触发。现在的问题是,仅当窗口内的单个组超过该数量时才会触发 100k 限制,而不是整个管道。
管道的相关部分如下所示:
PCollection<String> rawEvents = pipeline
.apply("Read PubSub Events",
PubsubIO.readStrings()
.fromSubscription(options.getInputSubscription()));
rawEvents
.apply("1h Window",
Window.<String>into(FixedWindows.of(Duration.standardHours(1))
.triggering(
Repeatedly
.forever(
AfterFirst.of(
AfterPane.elementCountAtLeast(100000),
AfterWatermark.pastEndOfWindow())))
.discardingFiredPanes()
.withAllowedLateness(Duration.standardDays(7),
Window.ClosingBehavior.FIRE_IF_NON_EMPTY)
.withOnTimeBehavior(Window.OnTimeBehavior.FIRE_IF_NON_EMPTY))
.apply("Write File(s)", new WriteFiles(options, new EventPartitioner()));
该WriteFiles
组件是一个PTransform
扩展的组件FileIO.Write
,它通过一个键对元素进行分组。
我将如何做到这一点,以便在管道中总共有 100k 事件而不是特定组的 100k 事件之后触发窗口?提前致谢!
解决方案
推荐阅读
- bluetooth - 是否可以将数据写入 BLE 广播设备?
- python - 是否可以从文件中传递 python 行为命令行参数
- javascript - vue和react中的功能相同,但在react中不起作用
- javascript - JavaScript/浏览器中的事件处理
- python - 如何在 TF2 中构建具有容差的自定义精度指标?
- azure - 导入 Azure 数据工厂的 SharePoint 列表大小限制
- java - B4A 中的错误:java.lang.RuntimeException:应首先初始化对象(EditText)
- python - os.popen 奇怪的编解码器问题
- java - Selenium 无法切换到 iframe 端输入用户名-Java
- scala - 将 XML 列解析为多列并根据 Spark DataFrame 中的计数转置为行