Pertimbangan produksi untuk Streaming Terstruktur
Artikel ini berisi rekomendasi untuk menjadwalkan beban kerja Streaming Terstruktur menggunakan pekerjaan di Azure Databricks.
Databricks merekomendasikan untuk selalu melakukan hal berikut:
- Hapus kode yang tidak perlu dari notebook yang akan mengembalikan hasil, seperti
display
dancount
. - Jangan jalankan beban kerja Streaming Terstruktur menggunakan komputasi semua tujuan. Selalu jadwalkan aliran sebagai pekerjaan menggunakan komputasi pekerjaan.
- Jadwalkan pekerjaan menggunakan
Continuous
mode. - Jangan aktifkan penskalaan otomatis untuk komputasi untuk pekerjaan Streaming Terstruktur.
Beberapa beban kerja mendapat manfaat dari hal berikut:
- Mengonfigurasi penyimpanan status RocksDB di Azure Databricks
- Titik pemeriksaan status asinkron untuk kueri stateful
- Apa itu pelacakan kemajuan asinkron?
Azure Databricks telah memperkenalkan Tabel Langsung Delta untuk mengurangi kompleksitas pengelolaan infrastruktur produksi untuk beban kerja Streaming Terstruktur. Databricks merekomendasikan penggunaan Tabel Langsung Delta untuk alur Streaming Terstruktur baru. Lihat Apa itu Tabel Langsung Delta?.
Catatan
Penskalaan otomatis komputasi memiliki batasan penskalaan ukuran kluster untuk beban kerja Streaming Terstruktur. Databricks merekomendasikan penggunaan Tabel Langsung Delta dengan penskalaan otomatis yang disempurnakan untuk beban kerja streaming. Lihat Mengoptimalkan pemanfaatan kluster alur Delta Live Tables dengan penskalaan otomatis yang disempurnakan.
Merancang beban kerja streaming untuk mengharapkan kegagalan
Databricks merekomendasikan selalu mengonfigurasi pekerjaan streaming untuk memulai ulang secara otomatis saat gagal. Beberapa fungsionalitas, termasuk evolusi skema, mengasumsikan bahwa beban kerja Streaming Terstruktur dikonfigurasi untuk mencoba kembali secara otomatis. Lihat Mengonfigurasi pekerjaan Streaming Terstruktur untuk memulai ulang kueri streaming saat gagal.
Beberapa operasi seperti foreachBatch
memberikan jaminan setidaknya sekali daripada jaminan persis sekali. Untuk operasi ini, Anda harus membuat bahwa alur pemrosesan Anda idempotensi. Lihat Menggunakan foreachBatch untuk menulis ke sink data arbitrer.
Catatan
Saat kueri dimulai ulang, mikro-batch direncanakan selama proses eksekusi sebelumnya. Jika pekerjaan Anda gagal karena kesalahan di luar memori atau Anda membatalkan pekerjaan secara manual karena batch mikro yang terlalu besar, Anda mungkin perlu meningkatkan komputasi agar berhasil memproses mikro-batch.
Jika Anda mengubah konfigurasi di antara eksekusi, konfigurasi ini berlaku untuk batch baru pertama yang direncanakan. Lihat Memulihkan setelah perubahan dalam kueri Streaming Terstruktur.
Kapan pekerjaan mencoba lagi?
Anda dapat menjadwalkan beberapa tugas sebagai bagian dari pekerjaan Azure Databricks. Saat mengonfigurasi pekerjaan menggunakan pemicu berkelanjutan, Anda tidak dapat mengatur dependensi antar tugas.
Anda dapat memilih untuk menjadwalkan beberapa aliran dalam satu pekerjaan menggunakan salah satu pendekatan berikut:
- Beberapa tugas: Tentukan pekerjaan dengan beberapa tugas yang menjalankan beban kerja streaming menggunakan pemicu berkelanjutan.
- Beberapa kueri: Tentukan beberapa kueri streaming dalam kode sumber untuk satu tugas.
Anda juga dapat menggabungkan strategi ini. Tabel berikut membandingkan pendekatan ini.
Beberapa tugas | Beberapa kueri | |
---|---|---|
Bagaimana komputasi dibagikan? | Databricks merekomendasikan penyebaran komputasi pekerjaan berukuran tepat ke setiap tugas streaming. Anda dapat secara opsional berbagi komputasi di seluruh tugas. | Semua kueri berbagi komputasi yang sama. Anda dapat menetapkan kueri secara opsional ke kumpulan penjadwal. |
Bagaimana percobaan ulang ditangani? | Semua tugas harus gagal sebelum pekerjaan mencoba kembali. | Tugas mencoba kembali jika ada kueri yang gagal. |
Mengonfigurasi pekerjaan Streaming Terstruktur untuk memulai ulang kueri streaming saat gagal
Databricks merekomendasikan untuk mengonfigurasi semua beban kerja streaming menggunakan pemicu berkelanjutan. Lihat Menjalankan pekerjaan secara terus menerus.
Pemicu berkelanjutan menyediakan perilaku berikut secara default:
- Mencegah lebih dari satu eksekusi pekerjaan secara bersamaan.
- Memulai eksekusi baru saat eksekusi sebelumnya gagal.
- Menggunakan backoff eksponensial untuk percobaan ulang.
Databricks merekomendasikan untuk selalu menggunakan komputasi pekerjaan alih-alih komputasi serba guna saat menjadwalkan alur kerja. Pada kegagalan pekerjaan dan coba lagi, sumber daya komputasi baru disebarkan.
Catatan
Anda tidak perlu menggunakan streamingQuery.awaitTermination()
atau spark.streams.awaitAnyTermination()
. pekerjaan akan secara otomatis mencegah proses untuk selesai saat kueri streaming aktif.
Menggunakan kumpulan penjadwal untuk beberapa kueri streaming
Anda dapat mengonfigurasi kumpulan jadwal untuk menetapkan kapasitas komputasi ke kueri saat menjalankan beberapa kueri streaming dari kode sumber yang sama.
Secara default, semua kueri dimulai di notebook yang dijalankan di kumpulan penjadwalan adil yang sama. Pekerjaan Apache Spark yang dihasilkan oleh pemicu dari semua kueri streaming dalam buku catatan berjalan satu demi satu dalam urutan "first in, first out" (FIFO). Hal ini dapat menyebabkan penundaan yang tidak perlu dalam kueri, karena kueri-kueri ini tidak membagikan sumber daya kluster secara efisien.
Kumpulan penjadwal memungkinkan Anda mendeklarasikan kueri Streaming Terstruktur mana yang berbagi sumber daya komputasi.
Contoh berikut menetapkan query1
ke kumpulan khusus, sementara query2
dan query3
berbagi kumpulan penjadwal.
# Run streaming query1 in scheduler pool1
spark.sparkContext.setLocalProperty("spark.scheduler.pool", "pool1")
df.writeStream.queryName("query1").toTable("table1")
# Run streaming query2 in scheduler pool2
spark.sparkContext.setLocalProperty("spark.scheduler.pool", "pool2")
df.writeStream.queryName("query2").toTable("table2")
# Run streaming query3 in scheduler pool2
spark.sparkContext.setLocalProperty("spark.scheduler.pool", "pool2")
df.writeStream.queryName("query3").toTable("table3")
Catatan
Konfigurasi properti lokal harus berada di sel buku catatan yang sama tempat Anda memulai kueri streaming.
Lihat dokumentasi penjadwal adil Apache untuk detail lebih lanjut.