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 sink yang didukung.

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

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

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

Keuntungan I/O terkelola mencakup hal berikut:

  • 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 nilai kunci, sehingga menghasilkan kode pipeline yang lebih sederhana dan konsisten. Untuk mengetahui 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 akan tetap berjalan, tetapi tidak mendapatkan manfaat dari layanan I/O terkelola.

Upgrade otomatis

Pipeline Dataflow dengan konektor I/O terkelola otomatis menggunakan versi konektor terbaru yang andal. Upgrade otomatis terjadi pada poin berikut dalam siklus proses tugas:

  • Pengiriman tugas. Saat Anda mengirimkan tugas batch atau streaming, Dataflow menggunakan versi terbaru konektor I/O Terkelola yang telah diuji dan berfungsi dengan baik.

  • Upgrade berkelanjutan. Untuk tugas streaming, Dataflow mengupgrade konektor I/O Terkelola di pipeline yang berjalan saat versi baru tersedia. Anda tidak perlu khawatir untuk mengupdate konektor atau versi Apache Beam pipeline secara manual.

    Secara default, upgrade berkelanjutan terjadi dalam periode 30 hari, yaitu upgrade dilakukan kira-kira setiap 30 hari. Anda dapat menyesuaikan periode atau menonaktifkan upgrade berkelanjutan berdasarkan per tugas. Untuk mengetahui informasi selengkapnya, lihat Menetapkan periode upgrade berkelanjutan.

    Seminggu sebelum upgrade, Dataflow menulis pesan notifikasi ke log pesan tugas.

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

Diagram berikut menunjukkan proses upgrade. Pengguna membuat pipeline Apache Beam menggunakan SDK versi X. Dataflow mengupgrade versi I/O Terkelola ke versi terbaru yang didukung. Upgrade terjadi saat pengguna mengirimkan tugas, setelah periode upgrade berkelanjutan, atau saat pengguna mengirimkan tugas penggantian.

Diagram yang menunjukkan proses upgrade Managed I/O.

Proses upgrade menambahkan waktu startup sekitar dua menit untuk tugas pertama (per project) yang menggunakan I/O terkelola, dan dapat berlangsung sekitar setengah menit untuk tugas berikutnya. Untuk upgrade berkelanjutan, layanan Dataflow meluncurkan tugas penggantian. Hal ini dapat menyebabkan waktu nonaktif sementara untuk pipeline Anda saat kumpulan pekerja yang ada dimatikan dan kumpulan pekerja baru dimulai. Untuk memeriksa status operasi I/O terkelola, cari entri log yang menyertakan string "Managed Transform(s)".

Menetapkan periode upgrade berkelanjutan

Untuk menentukan periode upgrade untuk tugas Dataflow streaming, tetapkan opsi layanan managed_transforms_rolling_upgrade_window sama dengan jumlah hari. Nilai harus antara 10 dan 90 hari, inklusif.

Java

--dataflowServiceOptions=managed_transforms_rolling_upgrade_window=DAYS

Python

--dataflow_service_options=managed_transforms_rolling_upgrade_window=DAYS

gcloud

Gunakan perintah gcloud dataflow jobs run dengan opsi additional-experiments. Jika Anda menggunakan Template Fleksibel yang menggunakan I/O Terkelola, gunakan gcloud dataflow flex-template run perintah.

--additional-experiments=managed_transforms_rolling_upgrade_window=DAYS

Untuk menonaktifkan upgrade berkelanjutan, tetapkan opsi layanan managed_transforms_rolling_upgrade_window ke never. Anda masih dapat memicu update dengan meluncurkan tugas penggantian.

Java

--dataflowServiceOptions=managed_transforms_rolling_upgrade_window=never

Python

--dataflow_service_options=managed_transforms_rolling_upgrade_window=never

Go

--dataflow_service_options=managed_transforms_rolling_upgrade_window=never

gcloud

Gunakan perintah gcloud dataflow jobs run dengan opsi additional-experiments. Jika Anda menggunakan Template Fleksibel, gunakan perintah gcloud dataflow flex-template run.

--additional-experiments=managed_transforms_rolling_upgrade_window=never

Configuration API

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

Java

Untuk membuat sumber atau sink apa pun yang didukung oleh I/O Terkelola, Anda menggunakan class Managed. Tentukan sumber atau sink yang akan dibuat instance-nya, dan teruskan kumpulan parameter konfigurasi, mirip dengan berikut:

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 dibuat instance-nya, dan teruskan kumpulan parameter konfigurasi, mirip dengan berikut:

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 data masuk, guna menentukan tujuan untuk data 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 contoh kode yang menunjukkan cara menggunakan tujuan dinamis, lihat Menulis dengan tujuan dinamis.

Pemfilteran

Anda mungkin ingin memfilter 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 data input, tanpa menulis metadata ke tujuan.

Anda dapat menetapkan maksimal satu parameter ini untuk sink tertentu.

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

Sumber dan sink yang didukung

I/O Terkelola mendukung sumber dan sink berikut.

Untuk mengetahui informasi selengkapnya, lihat Konektor I/O Terkelola dalam dokumentasi Apache Beam.