我们正在实现一个从Kafka读取数据并写入BigQuery的试验。
简单的管道:
- KafkaIO.read
- BigQueryIO.write
关闭自动提交。我们使用commitOffsetsInFinalize()
这个设置是否可以保证消息在BigQuery中至少出现一次并且不会丢失,前提是在BigQueryIO端一切正常?
在commitOffsetsInFinalize()
的文档中,我遇到了以下内容:
它有助于在从头开始重新启动管道时减少记录的间隔或重复处理
我很好奇"差距"是什么。这里指的是什么?
如果考虑边缘情况,是否存在消息被跳过而不传递给BQ的可能性?
提交Apache Kafka的偏移量意味着如果你要重新启动你的管道,它将在你重新启动之前的流中的位置开始。Dataflow确实保证在写BigQuery时数据不会被丢弃。但是,使用分布式系统,总是存在出错的可能性(例如,GCP中断)。