PCollections tanpa batas, atau koleksi tanpa batas, mewakili data dalam pipeline streaming. Koleksi tanpa batas berisi data dari sumber data yang terus diperbarui seperti Pub/Sub.
Anda tidak dapat hanya menggunakan kunci untuk mengelompokkan elemen dalam koleksi yang tidak dibatasi. Mungkin ada elemen yang tak terbatas untuk kunci tertentu dalam data streaming karena sumber data terus menambahkan elemen baru. Anda dapat menggunakan jendela, watermark, dan pemicu untuk menggabungkan elemen dalam koleksi tanpa batas.
Konsep jendela juga berlaku untuk PCollection terbatas yang mewakili data dalam pipeline batch. Untuk informasi tentang pembuatan periode di pipeline batch, lihat dokumentasi Apache Beam untuk Pembuatan periode dengan PCollection terbatas.
Jika pipeline Dataflow memiliki sumber data terbatas, yaitu sumber yang tidak berisi data yang terus diperbarui, dan pipeline dialihkan ke mode streaming menggunakan flag --streaming
, saat sumber terbatas digunakan sepenuhnya, pipeline akan berhenti berjalan.
Menggunakan mode streaming
Untuk menjalankan pipeline dalam mode streaming, tetapkan flag --streaming
di
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 diskalakan seperti yang diharapkan. Untuk tugas streaming yang tidak menggunakan Streaming Engine, Anda tidak dapat menskalakan melebihi jumlah pekerja asli dan resource Disk Tetap yang dialokasikan di awal tugas asli. 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 menggunakan flag berikut:
Java
--maxNumWorkers
Python
--max_num_workers
Go
--max_num_workers
Fungsi jendela dan jendela
Fungsi jendela membagi koleksi tanpa batas menjadi komponen logis, atau jendela. Fungsi jendela mengelompokkan koleksi tanpa batas berdasarkan stempel waktu setiap elemen. Setiap jendela berisi elemen dalam jumlah terbatas.
Anda menetapkan periode berikut dengan Apache Beam SDK:
- Periode tumbling (disebut periode tetap di Apache Beam)
- Periode hopping (disebut periode geser di Apache Beam)
- Jendela sesi
Periode tumbling
Periode tumbling mewakili interval waktu yang konsisten dan tidak tumpang-tindih dalam streaming data.
Misalnya, jika Anda menetapkan ke periode tumbling tiga puluh detik, elemen dengan nilai stempel waktu [0:00:00-0:00:30) akan berada di periode pertama. Elemen dengan nilai stempel waktu [0:00:30-0:01:00) berada di jendela kedua.
Gambar berikut mengilustrasikan cara elemen dibagi menjadi periode tumbling tiga puluh detik.
Periode hopping
Periode hopping mewakili interval waktu yang konsisten dalam aliran data. Periode hopping dapat tumpang-tindih, sedangkan periode tumbling tidak tumpang-tindih.
Misalnya, periode hopping dapat dimulai setiap tiga puluh detik dan merekam data selama satu menit. Frekuensi dimulainya periode hopping disebut periode. Contoh ini memiliki periode tiga puluh detik dan periode satu menit.
Gambar berikut mengilustrasikan cara elemen dibagi menjadi periode lompat satu menit dengan periode tiga puluh detik.
Untuk mengambil rata-rata data yang berjalan, gunakan jendela hopping. Anda dapat menggunakan periode lompat satu menit dengan periode tiga puluh detik untuk menghitung rata-rata berjalan satu menit setiap tiga puluh detik.
Periode sesi
Periode sesi berisi elemen dalam durasi jeda elemen lain. Durasi jeda adalah interval antara data baru dalam aliran data. Jika data datang 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. Periode sesi dapat berisi data yang dihasilkan oleh klik.
Pembagian jendela sesi menetapkan jendela yang berbeda untuk setiap kunci data. Periode tumbling dan hopping berisi semua elemen dalam interval waktu yang ditentukan, terlepas dari kunci data.
Gambar berikut memvisualisasikan cara elemen dibagi menjadi periode sesi.
Watermark
Stempel waktu adalah nilai minimum yang menunjukkan kapan Dataflow mengharapkan semua data dalam periode waktu telah tiba. Jika watermark telah melewati akhir periode dan data baru tiba dengan stempel waktu dalam periode tersebut, data tersebut 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 sesuai urutan pembuatannya.
Sumber data menentukan watermark. Anda dapat mengizinkan data terlambat dengan Apache Beam SDK.
Pemicu
Pemicu menentukan kapan harus menampilkan 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 dalam pipeline streaming.
Apache Beam SDK dapat menetapkan pemicu yang beroperasi pada kombinasi kondisi berikut:
- Waktu peristiwa, seperti yang ditunjukkan oleh stempel waktu di setiap elemen data.
- Waktu pemrosesan, yaitu waktu elemen data diproses pada tahap tertentu dalam pipeline.
- Jumlah elemen data dalam koleksi.