Pengenalan Cloud Dataflow

Dataflow dapat kita bayangkan sebagai tool ETL yang sangat powerful untuk transforming data. Berikut berapa point mengenai Cloud Dataflow:

  • Fully Managed, severless tool.
  • Menggunakan open source Apache Beam SDK.
  • Mendukung SQL, Java dan Python APIs.
  • Mendukung realtime dan batch processing.
  • Stackdriver integration untuk logging dan monitoring proses.

Data yang akan diproses berada pada data source, bisa dari Cloud Pub/Sub, BigQuery dan Cloud Storage, atau external source (non GCP product) seperti Apache Kafka.

Data dari source akan diproses melalui Pipeline, dalam hal ini akan menggunakan Cloud Dataflow.

Data yang diproses akan disimpan dalam Sink, servis yang digunakan seperti: Cloud Storage, BigQuery, Bigtable dan Cloud Machine Learning.

Driver program dan Runner

Driver program adalah program yang Anda buat menggunakan Apache Beam SDK, dapat dibuat dalam bahasa Java atau Python. Program akan mendefinisikan Pipeline. Pipeline sendiri berisi informasi mengenai transformasi dari ingestion menjadi final output.

Driver program disubmit ke Pipeline Runner. Runner adalah software yang mengatur eksekusi pipeline. Runner bertindak sebagai translator untuk Backend Framework. Runner juga dapat mengatur eksekusi lokal untuk testing dan debug driver program.

Backend framework sendiri berupa parallel processing system.

PCollections dan Transforms

PCollection mewakili dataset.

PCollection dapat mewakili Batch atau Stream Data, jika data source berasal dari sumber yang fixed seperti file, disebut Bounded dan akan diperlakukan sebagai batch processing. Sementara jika data source yang secara kontinue melakukan update seperti dari smart device yang mengirimkan event, maka disebut Unbounded dan diperlakukan sebagai stream processing.

Ketika membaca data dari eksternal data source (Bounded atau Unbounded), Pipeline akan membuat Inisial PCollection. Namun selain itu, inisial PCollection juga dapat dibuat dari in-memory data.

Transform menunjukan operasi pemrosesan data. Transform akan menggunakan PCollection sebagai input dan Output. Transform akan membutuhkan 1 atau lebih PCollection sebagai input dan membutuhkan 0 atau lebih PCollection sebagai output.

Dalam sebuah pipeline umumnya memiliki beberapa tahap transformasi.

Pipeline Development Lifecycle

Pipeline development lifecycle terdiri dari:

  • Design, termasuk desain struktur pipeline, transformasi yang akan diterapkan dan menentuk input/output method.
  • Create, Beam program dimulai dengan instantiate pipeline object. Disini akan diimplementasikan transformasi yang diidentifikasi pada tahap desain.
  • Test, melakukan testing dan debuging. Disarankan untuk melakukan local unit testing untuk menemukan potensi error.

Faktor Pipeline Design

Saat melakukan desain, berikut beberapa faktor yang perlu dipertimbangkan:

  • Lokasi data, dimana input data disimpan, berapa banyak source yang digunakan.
  • Struktur dan format input data. Seperti apa data yang dimiliki? Ini akan membantu dalam menentukan transformasi yang akan dilakukan.
  • Tujuan dari transformasi. Apa yang akan anda lakukan terhadap data input, ini akan menentukan tahap transformasi yang perlu dilakukan.
  • Lokasi dan struktur dari data output.

Struktur Pipeline

Basic Pipeline

Basic pipeline umumnya memiliki struktur linear dari input hingga output.

Branching

Pipeline branching terjadi karena memiliki 2 transform yang berbeda atau satu transform yang memiliki output berbeda.

Merge Pipeline

Multiple Sources

Jadi umumnya pipeline tidak linear, dapat memiliki beberapa branch dan merge. Dataflow pipeline mewakili Directed Acyclic Graph (DAG). DAG adalah graph yang memiliki vertices dan edges yang terbatas. Dalam DAG tidak mungkin sebuah output dari transform menjadi input untuk transform yang sama.

Pipeline Creation

Berikut proses pipeline creation

  • Membuat Pipeline Object.
  • Membuat PCollection menggunakan read atau create transform.
  • Menerapkan multiple transform sesuai kebutuhan.
  • Menyimpan PCollection final.

External Source

Sharing is caring: