Google Cloud Dataflow menawarkan sistem pemrosesan data yang terkelola sepenuhnya untuk menjalankan pipeline Apache Beam di Google Cloud dengan cara yang sangat skalabel. Karena merupakan layanan yang terkelola sepenuhnya, pengguna Dataflow tidak perlu khawatir tentang adanya regresi dan pembuatan versi dari sisi layanan. Harapannya adalah Anda hanya perlu memperhatikan logika pipeline sementara Google mengurus infrastruktur layanan. Meskipun ini memang benar, Apache Beam sendiri merupakan SDK yang berfitur sangat lengkap yang menyediakan banyak transformasi sederhana hingga yang sangat kompleks yang bisa Anda gunakan dalam pipeline mereka. Sebagai contoh, Apache Beam menyediakan sejumlah konektor I/O. Banyak dari konektor ini merupakan transformasi komposit Apache Beam dari 10 hingga 100 langkah. Secara historis, ini dianggap sebagai “kode pengguna” dari perspektif layanan, meskipun tidak dibuat atau dikelola pengguna. Ada beberapa komplikasi umum yang dihadapi pelanggan saat melakukan transformasi Beam yang kompleks seperti konektor I/O.
Untuk mengatasi ketiga masalah tersebut, Dataflow baru-baru ini memperkenalkan penawaran baru bernama I/O Terkelola. Dengan I/O Terkelola, layanan itu sendiri mampu mengelola kompleksitas ini atas nama Anda. Oleh karena itu, Anda bisa benar-benar fokus pada logika bisnis pipeline alih-alih berfokus pada hal-hal kecil yang terkait dengan penggunaan dan konfigurasi konektor tertentu yang sesuai dengan kebutuhan mereka. Di bawah ini kami merinci bagaimana setiap kompleksitas yang disebutkan di atas ditangani melalui I/O Terkelola.
Apache Beam adalah SDK yang lengkap dengan banyak transformasi, fitur, dan pengoptimalan. Seperti banyak software besar lainnya, mengupgrade Beam ke versi baru merupakan proses yang tidak mudah. Biasanya mengupgrade Beam melibatkan proses upgrade semua bagian pipeline termasuk semua konektor I/O. Namun terkadang, Anda hanya perlu mendapatkan akses ke perbaikan bug kritis atau peningkatan yang tersedia dalam versi terbaru dari satu atau beberapa konektor I/O yang digunakan dalam pipeline Anda.
Managed I/O with Dataflow simplifies this by completely taking over the management of the Beam I/O connector version. With Managed I/O, Dataflow will make sure that I/O connectors used by pipelines are always up to date. Dataflow performs this by always upgrading I/O connectors to the latest vetted version during job submission and streaming update via replacement.
For example, assume that you use a Beam pipeline that uses Beam 2.x.0 and assume that you use the Managed Apache Iceberg I/O source in your pipeline. Also, assume that the latest vetted version of the Iceberg I/O source supported by Dataflow is 2.y.0. During job submission, Dataflow will replace this specific connector with version 2.y.0 and will keep the rest of the Beam pipeline including any standard (non-managed) I/O connectors at version 2.x.0.
Setelah penggantian, Dataflow mengoptimalkan pipeline terupdate dan mengeksekusinya di GCE. Untuk mencapai isolasi antara konektor dari versi Beam yang berbeda, Dataflow menerapkan container Beam SDK tambahan di GCE VM. Jadi dalam kasus ini, container Beam SDK dari versi 2.x.0 dan 2.y.0 akan berjalan di setiap GCE VM yang digunakan oleh tugas Dataflow.
Jadi, dengan I/O Terkelola, Anda dapat memastikan bahwa konektor I/O yang digunakan dalam pipeline Anda selalu terbaru. Hal ini memungkinkan Anda untuk fokus meningkatkan logika bisnis pipeline Anda tanpa perlu khawatir mengupgrade versi Beam hanya untuk mendapatkan update konektor I/O.
Perbedaan API di seluruh konektor I/O Beam sangatlah bervariasi. Ini berarti, setiap kali Anda mencoba menggunakan konektor I/O Beam baru, Anda harus mempelajari API khusus untuk konektor tersebut. Beberapa API bisa sangat besar dan tidak intuitif. Hal ini bisa disebabkan oleh:
Poin-poin di atas menghasilkan platform API yang sangat besar untuk beberapa konektor yang tidak intuitif serta tidak efisien jika digunakan oleh pelanggan baru.
Managed I/O offers standardized Java and Python APIs for supported I/O connectors. For example, with Beam Java SDK an I/O connector source can be instantiated in the following standardized form.
Managed.read(SOURCE).withConfig(sourceConfig)
An I/O connector sink can be instantiated in the following form.
Managed.write(SINK).withConfig(sinkConfig)
Here SOURCE
and SINK
are keys specifically identifying the connector while sourceConfig
and sinkConfig
are maps of configurations used to instantiate the connector source or sink. The map of configurations may also be provided as YAML files available locally or in Google Cloud Storage. Please see the Managed I/O website for more complete examples for supported sources and sinks.
Beam Python SDK menawarkan API disederhanakan yang serupa.
Artinya berbagai konektor I/O Beam dengan API yang berbeda dapat dibuat instance dengan cara yang sangat standar. Sebagai contoh,
// Create a Java BigQuery I/O source
Map<String, Object> bqReadConfig = ImmutableMap.of("query", "<query>", ...);
Managed.read(Managed.BIGQUERY).withConfig(bqReadConfig)
// Create a Java Kafka I/O source.
Map<String, Object> kafkaReadConfig = ImmutableMap.of("bootstrap_servers", "<server>", "topic", "<topic>", ...);
Managed.read(Managed.KAFKA).withConfig(kafkaReadConfig)
// Create a Java Kafka I/O source but with a YAML based config available in Google Cloud Storage.
String kafkaReadYAMLConfig = "gs://path/to/config.yaml"
Managed.read(Managed.KAFKA).withConfigUrl(kafkaReadYAMLConfig)
// Create a Python Iceberg I/O source.
iceberg_config = {"table": "<table>", ...}
managed.Read(managed.ICEBERG, config=iceberg_config)
Banyak konektor Beam menawarkan API yang komprehensif untuk mengonfigurasi dan mengoptimalkan konektor agar sesuai dengan pipeline dan Beam runner tertentu. Salah satu kelemahannya adalah jika Anda secara khusus ingin menjalankan Dataflow, Anda mungkin harus mempelajari konfigurasi khusus yang paling sesuai dengan Dataflow dan menerapkannya saat menyiapkan pipeline Anda. Dokumentasi terkait konektor bisa saja panjang serta mendetail dan perubahan khusus yang diperlukan mungkin tidak intuitif. Hal ini dapat mengakibatkan konektor yang digunakan dalam pipeline Dataflow berkinerja kurang optimal.
Mengelola konektor I/O dapat mengatasi hal ini dengan mengonfigurasi ulang konektor secara otomatis untuk menggabungkan praktik terbaik dan mengonfigurasinya agar sesuai dengan Dataflow. Konfigurasi ulang tersebut bisa terjadi selama pengiriman tugas atau streaming update melalui penggantian.
Sebagai contoh, pipeline streaming Dataflow menawarkan dua mode, exactly-once dan at-least-once, sementara sink I/O BigQuery dengan Storage Write API menawarkan dua semantik penayangan analog, yaitu exactly-once dan at-least-once. Sink BigQuery dengan semantik penayangan at-least-once biasanya lebih murah dan menghasilkan latensi yang lebih rendah. Dengan konektor I/O BigQuery standar, Anda bertanggung jawab untuk memastikan bahwa Anda menggunakan mode yang sesuai saat menggunakan I/O BigQuery. Dengan sink I/O BigQuery Terkelola, ini secara otomatis dikonfigurasi untuk Anda. Artinya, jika pipeline streaming Anda beroperasi pada mode at-least-once, sink BigQuery I/O Terkelola akan secara otomatis dikonfigurasi agar menggunakan semantik penayangan at-least-once.
Kami menjalankan beberapa pipeline yang menulis data menggunakan sink I/O Iceberg Terkelola yang didukung oleh katalog Hadoop yang diterapkan di GCS (silakan lihat di sini untuk katalog lain yang didukung). Pipeline dikirimkan menggunakan Beam 2.61.0 dan sink I/O Terkelola secara otomatis diupgrade oleh Dataflow ke versi terbaru yang didukung. Semua tolok ukur menggunakan VM n1-standard-4 dan jumlah VM yang digunakan oleh pipeline ditetapkan sebanyak 100. Harap catat bahwa waktu eksekusi di sini tidak termasuk waktu startup dan shutdown.
Seperti yang ditunjukkan tolok ukur, I/O Iceberg Terkelola diskalakan dengan baik dan kedua metrik tumbuh secara linear dengan ukuran data.
Kami juga menjalankan pipeline streaming yang membaca dari Google Pub/Sub dan menggunakan sink Kafka I/O Terkelola untuk mendorong pesan ke kluster Kafka yang dihosting di GCP. Pipeline menggunakan Beam 2.61.0 dan Dataflow mengupgrade sink Kafka Terkelola ke versi terbaru yang didukung. Dalam kondisi stabil, pipeline menggunakan 10 n1-standard-4 VM (maksimal 20 VM). Pipeline secara konsisten memproses pesan dengan throughput 250 ribu pesan/detik di semua langkah dan berjalan selama 2 jam.
Grafik berikut ini menunjukkan throughput data dari berbagai langkah pipeline. Perhatikan bahwa throughput di sini berbeda karena ukuran elemen berubah di antara langkah-langkahnya. Pipeline membaca dari Pub/Sub dengan kecepatan 75 MiB/detik (garis merah) dan menulis ke Kafka dengan kecepatan 40 MiB/detik (garis hijau).
Baik latensi maupun backlog tercatat rendah selama eksekusi pipeline.
Pipeline menggunakan CPU dan memori VM secara efisien.
Seperti yang ditunjukkan hasil ini, pipeline dieksekusi secara efisien dengan sink Kafka I/O Terkelola yang telah diupgrade yang disediakan oleh layanan Dataflow.
Menggunakan I/O Terkelola semudah menggunakan salah satu sumber dan sink yang didukung dalam pipeline Anda dan menjalankan pipeline dengan Dataflow Runner v2. Ketika Anda menjalankan pipeline, Dataflow akan memastikan bahwa versi terbaru dari sumber dan sink yang telah diverifikasi diaktifkan selama pengiriman tugas dan streaming update melalui penggantian, bahkan jika Anda menggunakan versi Beam yang lebih lama untuk pipeline Anda.