Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Halaman ini menyediakan informasi referensi untuk mode real time dalam Streaming Terstruktur, termasuk lingkungan, bahasa, sumber, sink, dan operator yang didukung. Untuk batasan yang diketahui, lihat Batasan mode real-time.
Bahasa yang didukung
Mode real time mendukung Scala, Java, dan Python.
Jenis komputasi
Mode real time mendukung jenis komputasi berikut:
| Jenis komputasi | Dukungan |
|---|---|
| Khusus (sebelumnya: pengguna tunggal) | ✓ |
| Standar (sebelumnya: dapat dibagikan) | ✓ (hanya Python) |
| Alur Deklaratif Lakeflow Spark Klasik | Tidak didukung |
| Alur Deklaratif Lakeflow Spark Tanpa Server | Tidak didukung |
| Serverless | Tidak didukung |
Untuk beban kerja sensitif latensi dengan UDF, Databricks merekomendasikan agar Anda menggunakan mode akses khusus. Lihat Fungsi tabel.
Mode eksekusi
Mode real time hanya mendukung mode pembaruan:
| Mode eksekusi | Dukungan |
|---|---|
| Mode pembaruan | ✓ |
| Append mode | Tidak didukung |
| Mode lengkap | Tidak didukung |
Sumber dan penampung
Mode real time mendukung sumber dan sink berikut:
| Sumber atau sink | Sebagai sumber | Sebagai sink |
|---|---|---|
| Apache Kafka | ✓ | ✓ |
| Event Hubs (menggunakan konektor Kafka) | ✓ | ✓ |
| Kinesis | ✓ (hanya mode EFO) | Tidak didukung |
| AWS MSK | ✓ | Tidak didukung |
| Delta | Tidak didukung | Tidak didukung |
| Google Pub/Sub | Tidak didukung | Tidak didukung |
| Apache Pulsar | Tidak didukung | Tidak didukung |
Sink sebarang (menggunakan forEachWriter) |
Tidak berlaku | ✓ |
Para Operator
Mode real time mendukung sebagian besar operator Streaming Terstruktur:
Operasi stateless
| Operator | Dukungan |
|---|---|
| Seleksi | ✓ |
| Proyeksi | ✓ |
UDFs
| Operator | Dukungan |
|---|---|
| Scala UDF | ✓ (dengan beberapa batasan) |
| Python UDF (User Defined Function) | ✓ (dengan beberapa batasan) |
Aggregation
| Operator | Dukungan |
|---|---|
| sum | ✓ |
| hitung | ✓ |
| max | ✓ |
| min | ✓ |
| avg | ✓ |
| Fungsi agregasi | ✓ |
Windowing
| Operator | Dukungan |
|---|---|
| Tumbling | ✓ |
| Geser | ✓ |
| Sesi | Tidak didukung |
Deduplication
| Operator | Dukungan |
|---|---|
| dropDuplicates | ✓ (status tidak terbatas) |
| hapusDuplikatDalamTandaAir | Tidak didukung |
Streaming ke gabungan tabel
| Operator | Dukungan |
|---|---|
| Gabungan tabel siaran (tabel harus kecil) | ✓ |
| Streaming untuk streaming gabungan | Tidak didukung |
| (flat)MapGroupsWithState | Tidak didukung |
| transformWithState | ✓ (dengan beberapa perbedaan) |
| union | ✓ (dengan beberapa batasan) |
| forEach | ✓ |
| forEachBatch | Tidak didukung |
| mapPartitions | Tidak didukung (lihat batasan) |
Pertimbangan khusus
Beberapa operator dan fitur memiliki pertimbangan atau perbedaan khusus saat digunakan dalam mode real time.
transformWithState dalam mode real time
Untuk membangun aplikasi dengan status yang dapat diatur sesuai kebutuhan, Databricks mendukung transformWithState, sebuah API dalam Apache Spark Structured Streaming. Lihat Membangun aplikasi stateful kustom untuk informasi selengkapnya tentang API dan cuplikan kode.
Namun, ada beberapa perbedaan antara bagaimana API bereaksi dalam mode real-time dan kueri streaming tradisional yang memanfaatkan arsitektur mikro-batch.
- Mode real time memanggil
handleInputRows(key: String, inputRows: Iterator[T], timerValues: TimerValues)metode untuk setiap baris.- Iterator
inputRowsmengembalikan satu nilai. Mode mikro-batch memanggilnya sekali untuk setiap kunci, dan iteratorinputRowsmengembalikan semua nilai untuk kunci dalam batch mikro. - Perhitungkan perbedaan ini saat menulis kode Anda
- Iterator
- Timer waktu peristiwa tidak didukung dalam mode real time.
-
transformWithStateInPandastidak didukung dalam mode real time. Gunakan API berbasistransformWithStatebaris sebagai gantinya, yang menggunakanRowobjek daripada pandas DataFrames. - Dalam mode real-time, peluncuran timer tertunda berdasarkan kedatangan data.
- Jika timer dijadwalkan untuk 10:00:00 tetapi tidak ada data yang tiba, timer tidak langsung diaktifkan.
- Jika data tiba pada pukul 10:00:10, timer akan diaktifkan dengan penundaan 10 detik.
- Jika tidak ada data yang tiba dan batch yang berjalan lama berakhir, timer akan diaktifkan sebelum batch berakhir.
Note
Dalam Databricks Runtime 18.1 ke bawah, jika Anda menggunakan mode transformWithState dan real time untuk Python dengan throughput rendah, kurang dari 5 rekaman per detik, Anda mungkin melihat peningkatan latensi hingga beberapa ratus milidetik. Databricks merekomendasikan peningkatan ke Databricks Runtime 18.2 ke atas untuk diselesaikan.
Python UDF dalam mode real time
Databricks mendukung sebagian besar fungsi Python yang ditentukan pengguna (UDF) dalam mode real time:
Tanpa Negara
| Jenis UDF | Dukungan |
|---|---|
| Python UDF skalar (F skalar yang ditentukan pengguna - Python) | ✓ |
| Arrow UDF skalar | ✓ |
| Pandas skalar UDF (fungsi Pandas yang ditentukan pengguna) | ✓ |
Fungsi panah (mapInArrow) |
✓ |
| Fungsi Panda (Peta) | ✓ |
Pengelompokan stateful (UDAF)
| Jenis UDF | Dukungan |
|---|---|
transformWithState (hanya Row antarmuka) |
✓ |
transformWithStateInPandas |
Tidak didukung. Gunakan API berbasis transformWithState baris sebagai gantinya, yang menggunakan Row objek daripada pandas DataFrames. Lihat transformWithStateInPandas tidak didukung untuk detailnya. |
applyInPandasWithState |
Tidak didukung |
Pengelompokan non-stateful (UDAF)
| Jenis UDF | Dukungan |
|---|---|
apply |
Tidak didukung |
applyInArrow |
Tidak didukung |
applyInPandas |
Tidak didukung |
Fungsi tabel
| Jenis UDF | Dukungan |
|---|---|
| UDTF (Python fungsi tabel yang ditentukan pengguna (UDTF)) | Tidak didukung |
| UC UDF | Tidak didukung |
Ada beberapa poin yang perlu dipertimbangkan saat menggunakan UDF Python dalam mode real time:
- Untuk meminimalkan latensi, konfigurasikan ukuran batch Arrow (
spark.sql.execution.arrow.maxRecordsPerBatch) ke 1.- Trade-off: Konfigurasi ini mengoptimalkan latensi dengan mengorbankan throughput. Untuk sebagian besar beban kerja, pengaturan ini direkomendasikan.
- Tingkatkan ukuran batch hanya jika throughput yang lebih tinggi diperlukan untuk mengakomodasi volume input, dengan menerima kemungkinan peningkatan latensi.
- UDF Pandas dan fungsi tidak berkinerja baik dengan ukuran batch Arrow 1.
- Jika Anda menggunakan UDF pandas atau fungsi terkait, atur ukuran batch Arrow ke nilai yang lebih tinggi (misalnya, 100 atau lebih tinggi).
- Ini menyiratkan latensi yang lebih tinggi. Databricks merekomendasikan penggunaan Arrow UDF atau fungsi jika memungkinkan.
-
transformWithStateInPandastidak didukung dalam mode real time. Gunakan API berbasistransformWithStatebaris sebagai gantinya, yang menggunakanRowobjek daripada pandas DataFrames. LihattransformWithStateInPandastidak didukung dan contoh mode Real-time untuk contoh Python kerja menggunakan API berbasis baris. - Untuk beban kerja sensitif latensi dengan UDF, Databricks merekomendasikan agar Anda menggunakan mode akses khusus. Dalam mode akses standar, overhead isolasi keamanan mungkin memperlambat performa UDF.