Pipeline streaming

PCollections tak terikat, atau koleksi tak terbatas, mewakili data dalam pipeline streaming. Koleksi tak terbatas berisi data dari sumber data yang terus diperbarui seperti Pub/Sub.

Anda tidak dapat menggunakan kunci saja untuk mengelompokkan elemen dalam koleksi tak terbatas. Jumlah elemen untuk kunci tertentu dalam data streaming mungkin tidak terbatas karena sumber data terus menambahkan elemen baru. Anda dapat menggunakan jendela, watermarks, dan pemicu untuk menggabungkan elemen dalam koleksi tak terbatas.

Konsep jendela juga berlaku pada PCollection terbatas yang mewakili data dalam pipeline batch. Untuk mengetahui informasi tentang windowing di pipeline batch, lihat dokumentasi Apache Beam untuk Windowing dengan PCollections yang dibatasi.

Jika pipeline Dataflow memiliki sumber data terikat, yaitu sumber yang tidak berisi data yang terus diperbarui, dan pipeline dialihkan ke mode streaming menggunakan tanda --streaming, dan ketika sumber yang dibatasi dipakai sepenuhnya, pipeline akan berhenti berjalan.

Menggunakan mode streaming

Untuk menjalankan pipeline dalam mode streaming, tetapkan tanda --streaming pada command line saat Anda menjalankan pipeline. Anda juga dapat menetapkan mode streaming secara terprogram saat membuat pipeline.

Sumber batch tidak didukung dalam mode streaming.

Saat Anda memperbarui pipeline dengan kumpulan pekerja yang lebih besar, tugas streaming Anda mungkin tidak ditingkatkan seperti yang diharapkan. Untuk tugas streaming yang tidak menggunakan Streaming Engine, Anda tidak dapat melakukan penskalaan melebihi jumlah pekerja asli dan resource Persistent Disk yang dialokasikan di awal tugas awal Anda. Saat memperbarui tugas Dataflow dan menentukan jumlah pekerja yang lebih besar dalam tugas baru, Anda hanya dapat menentukan jumlah pekerja yang sama dengan jumlah maksimum pekerja yang Anda tentukan untuk tugas asli.

Tentukan jumlah maksimum pekerja dengan menggunakan flag berikut:

Java

--maxNumWorkers

Python

--max_num_workers

Go

--max_num_workers

Fungsi jendela dan windowing

Fungsi windowing membagi koleksi tanpa batas menjadi komponen logis, atau jendela. Fungsi jendela mengelompokkan koleksi tidak terbatas menurut stempel waktu setiap elemen. Setiap jendela berisi jumlah elemen yang terbatas.

Anda menyetel jendela berikut dengan Apache Beam SDK atau ekstensi streaming Dataflow SQL:

Jendela jatuh

Jendela jatuh merepresentasikan interval waktu yang konsisten dan terpisah dalam aliran data.

Misalnya, jika Anda menyetel ke jendela jatuh tiga puluh detik, elemen dengan nilai stempel waktu [0:00:00-0:00:30) akan berada di jendela pertama. Elemen dengan nilai stempel waktu [0:00:30-0:01:00) berada di jendela kedua.

Gambar berikut mengilustrasikan cara elemen dibagi menjadi jendela jatuh tiga detik.

Gambar yang menampilkan jendela bergoyang, durasi 30 detik

Jendela meluncur

Jendela melompat mewakili interval waktu yang konsisten dalam aliran data. Jendela yang meloncat bisa tumpang tindih, sedangkan jendela yang bergerak tidak saling menyatu.

Misalnya, rentang waktu {i>hopping<i} dapat dimulai setiap tiga puluh detik dan mengambil data selama satu menit. Frekuensi saat jendela melompat disebut periode. Contoh ini memiliki interval satu menit dan periode tiga puluh detik.

Gambar berikut mengilustrasikan cara elemen dibagi menjadi periode melompat satu menit dengan periode tiga puluh detik.

Gambar yang menampilkan jendela berpindah dengan durasi periode 1 menit dan periode periode 30 detik

Untuk mengambil data rata-rata yang berjalan, gunakan jendela {i>hopping<i}. Anda dapat menggunakan periode melompat satu menit dengan periode tiga puluh detik untuk menghitung rata-rata berlari satu menit setiap tiga puluh detik.

Periode sesi

Jendela sesi berisi elemen dalam durasi jeda elemen lain. Durasi jeda adalah interval antara data baru dalam aliran data. Jika data masuk setelah durasi jeda, data akan ditetapkan ke jendela baru.

Misalnya, jendela sesi dapat membagi aliran data yang mewakili aktivitas mouse pengguna. Aliran data ini mungkin memiliki periode waktu tidak ada aktivitas yang lama yang diselingi dengan banyak klik. Jendela sesi dapat berisi data yang dihasilkan oleh klik.

Periode sesi menetapkan periode yang berbeda ke setiap kunci data. Jendela jatuh dan lompatan berisi semua elemen dalam interval waktu yang ditentukan, terlepas dari kunci data.

Gambar berikut memvisualisasikan cara elemen dibagi ke dalam jendela sesi.

Gambar yang menampilkan periode sesi dengan durasi jeda minimum

Watermark

Watermark adalah nilai minimum yang menunjukkan kapan Dataflow memperkirakan semua data dalam jendela telah tiba. Jika watermark telah berlanjut melewati akhir jendela dan data baru diterima dengan stempel waktu di dalam jendela, data ini dianggap sebagai data terlambat. Untuk informasi selengkapnya, lihat Watermark dan data terlambat dalam dokumentasi Apache Beam.

Dataflow melacak watermark karena alasan berikut:

  • Data tidak dijamin akan tiba dalam urutan waktu atau pada interval yang dapat diprediksi.
  • Peristiwa data tidak dijamin akan muncul di pipeline dengan urutan yang sama seperti saat dihasilkan.

Sumber data menentukan watermark. Anda dapat mengizinkan data yang terlambat dengan Apache Beam SDK. Dataflow SQL tidak memproses data yang terlambat.

Triggers

Pemicu menentukan waktu untuk memunculkan hasil gabungan saat data tiba. Secara default, hasil akan ditampilkan saat Watermark melewati akhir jendela.

Anda dapat menggunakan Apache Beam SDK untuk membuat atau mengubah pemicu untuk setiap koleksi di pipeline streaming. Anda tidak dapat menetapkan pemicu dengan Dataflow SQL.

Apache Beam SDK dapat menetapkan pemicu yang beroperasi pada kombinasi dari kondisi berikut:

  • Waktu peristiwa, seperti yang ditunjukkan oleh stempel waktu di setiap elemen data.
  • Waktu pemrosesan, yaitu waktu saat elemen data diproses pada tahap tertentu dalam pipeline.
  • Jumlah elemen data dalam koleksi.

Langkah selanjutnya

Untuk mempelajari lebih lanjut desain streaming SQL, lihat One SQL untuk Aturan Semua.