Unbounded PCollection, atau koleksi yang tidak terbatas, merepresentasikan 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 terbatas. Mungkin ada banyak elemen untuk kunci tertentu dalam data streaming karena sumber data terus menambahkan elemen baru. Anda dapat menggunakan periode, watermark, dan pemicu untuk menggabungkan elemen dalam koleksi yang tidak terbatas.
Konsep periode juga berlaku untuk bounded PCollection yang merepresentasikan data dalam pipeline batch. Untuk mengetahui informasi tentang windowing di pipeline batch, lihat dokumentasi Apache Beam untuk Windowing dengan bounded PCollection.
Jika pipeline Dataflow memiliki sumber data yang terbatas, yaitu sumber yang tidak berisi data yang terus diperbarui, dan pipeline dialihkan ke mode streaming menggunakan flag --streaming saat sumber terbatas sepenuhnya digunakan, 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 menyetel mode streaming secara terprogram saat membuat pipeline.
Sumber batch tidak didukung dalam mode streaming.
Saat Anda memperbarui pipeline dengan kumpulan worker yang lebih besar, tugas streaming Anda mungkin tidak di-upscale seperti yang diharapkan. Untuk tugas streaming yang tidak menggunakan Streaming Engine, Anda tidak dapat melakukan penskalaan di luar jumlah worker awal dan resource Persistent Disk yang dialokasikan di awal tugas asli Anda. Saat Anda memperbarui tugas Dataflow dan menentukan jumlah worker yang lebih besar dalam tugas baru, Anda hanya dapat menentukan jumlah worker yang sama dengan jumlah worker maksimum yang Anda tentukan untuk tugas asli.
Tentukan jumlah maksimum worker menggunakan flag berikut:
Java
--maxNumWorkers
Python
--max_num_workers
Go
--max_num_workers
Fungsi jendela dan windowing
Fungsi windowing membagi koleksi yang tidak terbatas menjadi komponen logis, atau jendela. Fungsi windowing mengelompokkan koleksi yang tidak terbatas berdasarkan stempel waktu setiap elemen. Setiap jendela berisi sejumlah elemen terbatas.
Anda menetapkan jendela berikut dengan Apache Beam SDK:
- Periode tumbling (disebut periode tetap di Apache Beam)
- Periode hopping (disebut periode geser di Apache Beam)
- Periode sesi
Periode tumbling
Periode tumbling mewakili interval waktu yang konsisten dan terpisah dalam aliran data.
Misalnya, jika Anda menyetel ke periode tumbling tiga puluh detik, elemen dengan nilai stempel waktu [0:00:00-0:00:30) berada di periode waktu pertama. Elemen dengan nilai stempel waktu [0:00:30-0:01:00) berada di periode waktu 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 terpisah-pisah.
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 satu menit dan jangka waktu tiga puluh detik.
Gambar berikut mengilustrasikan cara elemen dibagi menjadi periode hopping satu menit dengan periode tiga puluh detik.

Untuk menghitung rata-rata data yang berjalan, gunakan periode hopping. Anda dapat menggunakan periode hopping satu menit dengan periode tiga puluh detik untuk menghitung rata-rata pergerakan 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 tiba setelah durasi jeda, data akan ditetapkan ke periode baru.
Misalnya, periode sesi dapat membagi aliran data yang merepresentasikan aktivitas mouse pengguna. Aliran data ini mungkin memiliki periode waktu tidak ada aktivitas yang panjang yang diselingi dengan banyak klik. Periode sesi dapat berisi data yang dihasilkan oleh klik.
Periode sesi menetapkan periode yang berbeda untuk setiap kunci data. Periode hopping dan tumbling berisi semua elemen dalam interval waktu yang ditentukan, terlepas dari kunci data.
Gambar berikut memvisualisasikan cara elemen dibagi menjadi periode sesi.

Watermark
Watermark adalah batas yang menunjukkan kapan Dataflow memperkirakan semua data dalam periode telah tiba. Jika watermark telah melampaui akhir periode dan data baru tiba dengan stempel waktu dalam periode tersebut, data dianggap sebagai data terlambat. Untuk mengetahui 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 dalam urutan yang sama dengan urutan pembuatan peristiwa tersebut.
Sumber data menentukan watermark. Anda dapat mengizinkan data terlambat dengan Apache Beam SDK.
Pemicu
Pemicu menentukan kapan hasil gabungan akan dikeluarkan saat data tiba. Secara default, hasil akan dikeluarkan saat watermark melewati akhir periode.
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, sebagaimana ditunjukkan oleh stempel waktu pada setiap elemen data.
- Waktu pemrosesan, yaitu waktu elemen data diproses pada tahap tertentu dalam pipeline.
- Jumlah elemen data dalam koleksi.