我使用KafkaIO API从Kafka主题传输消息https://beam.apache.org/documentation/sdks/javadoc/2.0.0/org/apache/beam/sdk/io/kafka/KafkaIO.html
管道流程如下:
KafkaStream - >使用变换器解码消息 - >保存到BigQuery
我解码消息并使用BigQueryIO保存到BigQuery . 我想知道我是否需要使用窗口 .
Window.into[Array[Byte]](FixedWindows.of(Duration.standardSeconds(10)))
.triggering(
Repeatedly
.forever(
AfterProcessingTime
.pastFirstElementInPane()
.plusDelayOf(Duration.standardSeconds(10))
)
)
.withAllowedLateness(Duration.standardSeconds(0))
.discardingFiredPanes()
)
根据文档,如果我们正在进行任何类似GroupByKey的计算,则需要Window . 由于我只是解码Array Byte消息并将它们存储到BigQuery中,因此可能不需要 .
请让我知道,我是否需要使用窗口?
1 回答
有一个答案已发布到similar question,其中数据来自PubSub . 主要思想是,由于不断添加新元素,因此不可能收集无界PCollections的所有元素,因此必须实现以下两种策略之一:
Windowing:您应首先设置非全局窗口函数 .
Triggers:您可以为无界PCollection设置触发器,使其在无界数据集上提供定期更新,即使订阅中的数据仍在流动
通过使用以下命令设置选项的相应arg参数,可能还需要在管道中启用Streaming: