Dataflow 中的資料處理作業可以高度平行化。Dataflow 會自動處理大部分的平行處理作業。I/O 連接器位於管道與架構其他部分 (例如檔案儲存空間、資料庫和訊息系統) 之間的界線。因此,I/O 連接器通常有特定的平行處理考量。
常見的最佳做法
以下列出在 Dataflow 中使用 I/O 連接器的一般最佳做法。
請參閱管道中連接器的 Javadoc、Pydoc 或 Go 說明文件。詳情請參閱 Apache Beam 說明文件中的 I/O 連接器。
使用最新版 Apache Beam SDK。我們會持續改善 I/O 連接器,新增功能並修正已知問題。
開發管道時,請務必平衡作業的平行處理。如果工作平行處理數量過少,速度可能會較慢,且資料可能會在來源中累積。不過,如果平行處理作業過多,可能會導致接收器無法負荷過多的要求。
請勿依賴元素的順序,一般來說,Dataflow 不保證集合中的元素順序。
如果所選 SDK 沒有 I/O 連接器,請考慮使用跨語言架構,從其他 SDK 使用 I/O 連接器。此外,連接器在 SDK 之間不一定具有同等功能。如果其他 SDK 的連接器提供您需要的特徵,您可以將其做為跨語言轉換。
一般來說,編寫自訂 I/O 連接器並不容易。盡可能使用現有的連接器。如需實作自訂 I/O 連接器,請參閱「開發新的 I/O 連接器」。
如果管道失敗,請檢查 I/O 連接器記錄的錯誤。請參閱「排解 Dataflow 錯誤」。
從 Dataflow 寫入連接器時,請考慮使用 ErrorHandler 處理任何失敗的寫入或格式錯誤的讀取作業。在 Apache Beam 2.55.0 以上版本中,下列 Java I/O 支援這類錯誤處理機制:BigQueryIO、BigtableIO、PubSubIO、KafkaIO、FileIO、TextIO 和 AvroIO。
個別 I/O 連接器的最佳做法
下列主題列出個別 I/O 連接器的最佳做法:
I/O 連接器 | 讀取 | 寫入 |
---|---|---|
Apache Iceberg | 從 Apache Iceberg 讀取 | 寫入 Apache Iceberg |
Apache Kafka | 從 Apache Kafka 讀取 | 寫入 Apache Kafka |
BigQuery | 讀取 BigQuery 中的資料 | 寫入 BigQuery |
Bigtable | 從 Bigtable 讀取資料 | 寫入 Bigtable |
Cloud Storage | 從 Cloud Storage 讀取 | 寫入 Cloud Storage |
Pub/Sub | 從 Pub/Sub 讀取資料 | 寫入 Pub/Sub |
Google 支援的 I/O 連接器
下表列出 Dataflow 支援的 Apache Beam I/O 連接器。如要查看 Apache Beam I/O 連接器的完整清單,包括 Apache Beam 社群開發的連接器,以及其他執行器支援的連接器,請參閱 Apache Beam 說明文件中的「I/O connectors」(I/O 連接器)。
I/O 連接器名稱 | Java | Python | Go |
---|---|---|---|
AvroIO | 支援 | 支援 | 支援 |
BigQueryIO | 支援 | 支援 | 支援 |
BigTableIO | 支援 | 支援水槽 | 支援水槽 |
DatastoreIO | 支援 | 支援 | 支援 |
FhirIO (醫療照護) | 支援 | 無法使用 | 支援 |
FileIO | 支援 | 支援 | 支援 |
GcsFileSystem | 支援 | 支援 | 支援 |
JdbcIO | 支援 | 跨語言支援 | 跨語言支援 |
KafkaIO | 支援 | 跨語言支援 | 跨語言支援 |
LocalFileSystem | 支援 | 支援 | 支援 |
ParquetIO | 支援 | 支援 | 支援 |
PubSubIO | 支援 | 支援 | 支援 |
SpannerIO | 支援 | 跨語言支援 | 支援 |
TextIO | 支援 | 支援 | 支援 |
TFRecordIO | 支援 | 支援 | 無法使用 |
後續步驟
- 請參閱 Apache Beam 說明文件中的 I/O 連接器。