Dataflow 是 Google Cloud 的一个全托管的、无服务器的数据处理服务。它既可以用于批处理,也可以用于流处理,而且能够保证数据的一致性。👍
批处理通常用于处理大量静态数据,例如日志分析、数据仓库 ETL 等。
ReadFromText("gs://my-bucket/input.txt")
.apply(ParDo.of(new MyTransformation()))
.apply(Sum.integersGlobally())
.apply(WriteToText("gs://my-bucket/output.txt"));
流处理用于处理实时数据流,例如实时监控、欺诈检测等。
ReadFromPubSub(topic="projects/my-project/topics/my-topic")
.apply(Window.into(FixedWindows.of(Duration.standardSeconds(10))))
.apply(ParDo.of(new MyRealtimeTransformation()))
.apply(Sum.integersGlobally())
.apply(WriteToBigQuery(table="my-project:my_dataset.my_table"));
Dataflow 通过多种机制来保证数据的一致性:
Dataflow 提供了 Exactly-Once 处理语义,确保每条数据只被处理一次,即使在发生故障时也能保证数据不丢失、不重复。
在流处理中,窗口和触发器是保证数据一致性的重要手段。
累积模式允许窗口在每次触发时都输出所有已累积的结果,而不是仅仅输出增量结果。这有助于保证数据的完整性。
Side Inputs 允许 Pipeline 从外部数据源读取数据,并将这些数据作为辅助信息用于主数据流的处理。这可以用来进行数据增强、数据验证等操作。
Watermark 是 Dataflow 用来估计数据完整性的机制。它表示 Dataflow 认为所有早于该时间戳的数据都已经到达。
DLQ 用于存储处理失败的数据,例如由于数据格式错误、数据校验失败等原因导致的数据。这可以防止错误数据影响整个 Pipeline 的执行。
Dataflow允许用户自定义Checkpoint策略,更细粒度地控制状态保存和恢复,适用于对一致性有特殊要求的场景。
Google Cloud Dataflow 提供了强大的批处理和流处理能力,并通过 Exactly-Once 处理、窗口与触发器、累积模式、Side Inputs、Watermark 和 Dead-Letter Queue 等机制来保证数据的一致性。通过合理地配置和使用这些机制,可以构建可靠、高效的数据处理 Pipeline。😊