Referensi mode real time

Halaman ini menjelaskan dukungan untuk kueri mode waktu nyata yang menggunakan API Streaming Terstruktur secara langsung. Untuk pipeline yang dikelola, lihat mode real-time di pipeline Lakeflow, yang memiliki kebutuhan runtime, source, sink, dan operator terpisah.

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 Lakeflow pada klasik Didukung melalui konfigurasi pipeline
Alur Lakeflow tanpa server Didukung melalui konfigurasi pipeline
Buku catatan dan pekerjaan tanpa server Tidak didukung untuk kueri waktu nyata Structured Streaming langsung

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 ✓ (Mode EFO direkomendasikan; polling di Databricks Runtime 19 dan ke atas) 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 ✓
mapPartitions Tidak didukung (lihat batasan)
Union ✓ (dengan beberapa batasan)

UDFs

Operator Dukungan
Scala UDF ✓ (UDF skalar). Fungsi yang dikelompokkan, seperti dan flatMapGroupsmapGroupsWithState, tidak didukung.
Python UDF (User Defined Function) ✓ (dengan beberapa batasan)

Aggregation

Function Dukungan
sum ✓
hitung ✓
max ✓
min ✓
avg ✓
Fungsi agregasi ✓

Windowing

Operator Dukungan
Tumbling ✓
Geser ✓
Sesi Tidak didukung

Deduplication

Operator Dukungan
dropDuplicates ✓
hapusDuplikatDalamTandaAir ✓

Streaming ke gabungan tabel

Operator Dukungan
Gabungan Dalam ✓
Gabungan Luar ✓
Gabungan tabel siaran (ukuran tabel 10mb atau kurang) ✓
Gabungan tabel (tanpa siaran) Tidak didukung

Streaming untuk streaming gabungan

Operator Dukungan
Gabungan Dalam ✓ (Databricks Runtime 18 LTS ke atas, dengan beberapa konfigurasi)
Gabungan luar Tidak didukung

Note

Untuk menggunakan stream untuk mengalirkan gabungan dalam mode real-time, Anda harus mengatur konfigurasi Spark tambahan. Untuk informasi selengkapnya tentang konfigurasi dan persyaratan untuk menjalankan beberapa aliran, lihat Streaming untuk mengalirkan gabungan.

Operator stateful arbitrer

Operator Dukungan
(flat)MapGroupsWithState Tidak didukung
transformWithState ✓ (dengan beberapa perbedaan)

Sink yang ditentukan pengguna

Sink Dukungan
forEach ✓
forEachBatch Tidak didukung

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 transformWithState informasi lebih lanjut tentang API dan potongan kode.

transformWithState mendukung prosesor sinkron dan asinkron dalam mode waktu nyata. Untuk persyaratan pemrosesan asinkron, lihat pemrosesan asinkron dengan transformWithState.

Namun, API bersifat berbeda dalam mode real-time daripada dalam kueri mikro-batch.

  • Untuk prosesor sinkron, mode waktu nyata memanggil handleInputRows(key: String, inputRows: Iterator[T], timerValues: TimerValues) metode untuk setiap baris.
    • Iterator inputRows mengembalikan satu nilai. Mode micro-batch memanggilnya satu kali untuk setiap kunci, dan inputRows iterator mengembalikan semua nilai untuk kunci dalam micro-batch.
    • Perhitungkan perbedaan ini saat menulis kode Anda.
  • Untuk prosesor asinkron, mode real-time mengelompokkan baris yang tiba bersama dan memanggil handleInputRows satu kali untuk setiap kunci dalam grup, dengan semua baris kunci tersebut. Karena mode waktu nyata menjalankan batch yang berjalan lama, kunci yang sama dapat menerima banyak panggilan dalam satu batch.
  • 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 (Python fungsi skalar yang ditentukan pengguna (UDF)) ✓
Arrow UDF skalar ✓
Pandas skalar UDF (fungsi Pandas yang ditentukan pengguna) ✓
Fungsi panah (mapInArrow) Tidak didukung (lihat batasan)
Fungsi Panda (Peta) Tidak didukung (lihat batasan)

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:

  • Dalam Databricks Runtime 19 dan ke atas, mode waktu nyata mengelompokkan baris input berdasarkan waktu untuk semua UDF yang didukung mode waktu nyata. Setiap batch mengumpulkan baris yang tiba dalam waktu singkat (10 milidetik), atau sampai mencapai ukuran batch maksimum, lalu mengirimkannya ke UDF. Ini menyeimbangkan latensi dan throughput, sehingga Anda tidak perlu mengatur ukuran batch Arrow (spark.sql.execution.arrow.maxRecordsPerBatch) menjadi 1.
  • Dalam Databricks Runtime 18 LTS dan di bawahnya, baris hanya dikumpulkan berdasarkan hitungan:
    • Untuk meminimalkan latensi, atur ukuran batch Panah (spark.sql.execution.arrow.maxRecordsPerBatch) ke 1. Konfigurasi ini mengoptimalkan latensi dengan mengorbankan throughput. Tingkatkan ukuran batch hanya jika throughput yang lebih tinggi diperlukan untuk mengakomodasi volume input, dengan menerima kemungkinan peningkatan latensi.
    • UDF pandas tidak tampil baik dengan ukuran batch Arrow 1. Jika Anda menggunakan UDF pandas, atur ukuran batch Arrow ke nilai yang lebih tinggi (misalnya, 100 atau lebih tinggi). Ini menyiratkan latensi yang lebih tinggi. Databricks merekomendasikan menggunakan Arrow UDF 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.