I/O terkelola Dataflow

I/O Terkelola memungkinkan Dataflow mengelola konektor I/O tertentu yang digunakan dalam pipeline Apache Beam. I/O Terkelola menyederhanakan pengelolaan pipeline yang terintegrasi dengan sumber dan tujuan yang didukung.

I/O Terkelola terdiri dari dua komponen yang bekerja bersama:

  • Transformasi Apache Beam yang menyediakan API umum untuk membuat konektor I/O (sumber dan sink).

  • Layanan Dataflow yang mengelola konektor I/O ini atas nama Anda, termasuk kemampuan untuk mengupgradenya secara terpisah dari versi Apache Beam.

Keuntungan I/O terkelola meliputi:

  • Upgrade otomatis. Dataflow otomatis mengupgrade konektor I/O terkelola di pipeline Anda. Artinya, pipeline Anda menerima perbaikan keamanan, peningkatan performa, dan perbaikan bug untuk konektor ini, tanpa memerlukan perubahan kode apa pun. Untuk mengetahui informasi selengkapnya, lihat Upgrade otomatis.

  • API yang konsisten. Biasanya, konektor I/O di Apache Beam memiliki API yang berbeda, dan setiap konektor dikonfigurasi dengan cara yang berbeda. I/O Terkelola menyediakan satu API konfigurasi yang menggunakan properti key-value, sehingga menghasilkan kode pipeline yang lebih sederhana dan konsisten. Untuk informasi selengkapnya, lihat Configuration API.

Persyaratan

  • SDK berikut mendukung I/O terkelola:

    • Apache Beam SDK untuk Java versi 2.58.0 atau yang lebih baru.
    • Apache Beam SDK untuk Python versi 2.61.0 atau yang lebih baru.
  • Layanan backend memerlukan Dataflow Runner v2. Jika Runner v2 tidak diaktifkan, pipeline Anda tetap berjalan, tetapi tidak mendapatkan manfaat dari layanan I/O terkelola.

Upgrade otomatis

Pipeline Dataflow dengan konektor I/O terkelola otomatis menggunakan konektor versi terbaru yang andal, sebagai berikut:

  • Saat Anda mengirimkan tugas, Dataflow menggunakan versi konektor terbaru yang telah diuji dan berfungsi dengan baik.

  • Untuk tugas streaming, Dataflow memeriksa update setiap kali Anda meluncurkan tugas pengganti, dan otomatis menggunakan versi terbaru yang diketahui berfungsi dengan baik. Dataflow melakukan pemeriksaan ini meskipun Anda tidak mengubah kode apa pun dalam tugas penggantian.

Anda tidak perlu khawatir memperbarui konektor atau versi Apache Beam pipeline secara manual.

Diagram berikut menunjukkan proses upgrade. Pengguna membuat pipeline Apache Beam menggunakan SDK versi X. Saat pengguna mengirimkan tugas, Dataflow akan memeriksa versi I/O Terkelola dan mengupgradenya ke versi Y.

Diagram yang menunjukkan proses upgrade Managed I/O.

Proses upgrade menambahkan waktu sekitar dua menit ke waktu mulai tugas. Untuk memeriksa status operasi I/O terkelola, cari entri log yang menyertakan string "Managed Transform(s)".

API Konfigurasi

I/O Terkelola adalah transformasi Apache Beam siap pakai yang menyediakan API yang konsisten untuk mengonfigurasi sumber dan sink.

Java

Untuk membuat sumber atau tujuan yang didukung oleh I/O Terkelola, Anda menggunakan class Managed. Tentukan sumber atau sink yang akan di-instantiate, dan teruskan serangkaian parameter konfigurasi, mirip dengan berikut ini:

Map config = ImmutableMap.<String, Object>builder()
    .put("config1", "abc")
    .put("config2", 1);

pipeline.apply(Managed.read(/*Which source to read*/).withConfig(config))
    .getSinglePCollection();

Anda juga dapat meneruskan parameter konfigurasi sebagai file YAML. Untuk contoh kode lengkap, lihat Membaca dari Apache Iceberg.

Python

Impor modul apache_beam.transforms.managed dan panggil metode managed.Read atau managed.Write. Tentukan sumber atau sink yang akan di-instantiate, dan teruskan serangkaian parameter konfigurasi, mirip dengan berikut ini:

pipeline
| beam.managed.Read(
    beam.managed.SOURCE, # Example: beam.managed.KAFKA
    config={
      "config1": "abc",
      "config2": 1
    }
)

Anda juga dapat meneruskan parameter konfigurasi sebagai file YAML. Untuk contoh kode lengkap, lihat Membaca dari Apache Kafka.

Tujuan dinamis

Untuk beberapa sink, konektor I/O terkelola dapat memilih tujuan secara dinamis berdasarkan nilai kolom dalam data masuk.

Untuk menggunakan tujuan dinamis, berikan string template untuk tujuan. String template dapat menyertakan nama kolom dalam tanda kurung kurawal, seperti "tables.{field1}". Saat runtime, konektor mengganti nilai kolom untuk setiap rekaman masuk, guna menentukan tujuan untuk rekaman tersebut.

Misalnya, data Anda memiliki kolom bernama airport. Anda dapat menetapkan tujuan ke "flights.{airport}". Jika airport=SFO, data akan ditulis ke flights.SFO. Untuk kolom bertingkat, gunakan notasi titik. Misalnya: {top.middle.nested}.

Untuk kode contoh yang menunjukkan cara menggunakan tujuan dinamis, lihat Menulis dengan tujuan dinamis.

Pemfilteran

Anda dapat mengecualikan kolom tertentu sebelum ditulis ke tabel tujuan. Untuk sink yang mendukung tujuan dinamis, Anda dapat menggunakan parameter drop, keep, atau only untuk tujuan ini. Parameter ini memungkinkan Anda menyertakan metadata tujuan dalam rekaman input, tanpa menulis metadata ke tujuan.

Anda dapat menetapkan paling banyak satu parameter ini untuk sink tertentu.

Parameter konfigurasi Jenis data Deskripsi
drop daftar string Daftar nama kolom yang akan dihapus sebelum menulis ke tujuan.
keep daftar string Daftar nama kolom yang akan dipertahankan saat menulis ke tujuan. Kolom lainnya akan dihapus.
only string Nama tepat satu kolom yang akan digunakan sebagai rekaman tingkat teratas untuk ditulis saat menulis ke tujuan. Semua kolom lainnya akan dihapus. Kolom ini harus berjenis baris.

Sumber dan sink yang didukung

I/O Terkelola mendukung sumber dan sink berikut.