Referensi mode real time

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 inputRows mengembalikan satu nilai. Mode mikro-batch memanggilnya sekali untuk setiap kunci, dan iterator inputRows mengembalikan semua nilai untuk kunci dalam batch mikro.
    • Perhitungkan perbedaan ini saat menulis kode Anda
  • Timer waktu peristiwa tidak didukung dalam mode real time.
  • transformWithStateInPandas tidak didukung dalam mode real time. Gunakan API berbasis transformWithState baris sebagai gantinya, yang menggunakan Row objek 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.
  • transformWithStateInPandas tidak didukung dalam mode real time. Gunakan API berbasis transformWithState baris sebagai gantinya, yang menggunakan Row objek daripada pandas DataFrames. Lihat transformWithStateInPandas tidak 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.