Gerçek zamanlı mod başvurusu

Bu sayfada desteklenen ortamlar, diller, kaynaklar, havuzlar ve işleçler de dahil olmak üzere Yapılandırılmış Akış'ta gerçek zamanlı mod için başvuru bilgileri sağlanır. Bilinen sınırlamalar için bkz. Gerçek zamanlı mod sınırlamaları.

Desteklenen diller

Gerçek zamanlı mod Scala, Java ve Python destekler.

İşlem türleri

Gerçek zamanlı mod aşağıdaki işlem türlerini destekler:

İşlem türü Destekleniyor
Tahsis Edilmiş (eski adı: tek kullanıcı)
Standart (eski adı: paylaşılan) ✓ (yalnızca Python)
Lakeflow Spark Deklaratif Boru Hatları Klasik Desteklenmiyor
Lakeflow Spark Deklaratif İşlem Hatları Sunucusuz Desteklenmiyor
Serverless Desteklenmiyor

UDF'leri olan gecikmeye duyarlı iş yükleri için Databricks ayrılmış erişim modunu kullanmanızı önerir. Bkz. Tablo işlevleri.

Yürütme modları

Gerçek zamanlı mod yalnızca güncelleştirme modunu destekler:

Yürütme modu Destekleniyor
Güncelleştirme modu
Append mode Desteklenmiyor
Tamamlama modu Desteklenmiyor

Kaynaklar ve havuzlar

Gerçek zamanlı mod aşağıdaki kaynakları ve havuzları destekler:

Kaynak veya havuz Kaynak olarak Havuz olarak
Apache Kafka
Event Hubs (Kafka bağlayıcısı kullanarak)
Kinesis ✓ (yalnızca EFO modu) Desteklenmiyor
AWS MSK Desteklenmiyor
Delta Desteklenmiyor Desteklenmiyor
Google Pub/Sub (Mesajlaşma Hizmeti) Desteklenmiyor Desteklenmiyor
Apache Pulsar Desteklenmiyor Desteklenmiyor
Rastgele havuzlar (kullanarak forEachWriter) Uygulanamaz

Operatörler

Gerçek zamanlı mod çoğu Yapılandırılmış Akış işlecini destekler:

Durum bilgisi olmayan işlemler

Operatör Destekleniyor
Seleksiyon
Yansıtma

UDFs

Operatör Destekleniyor
Scala UDF ✓ (bazı sınırlamalarla)
Python Kullanıcı Tanımlı Fonksiyonu (UDF) ✓ (bazı sınırlamalarla)

Aggregation

Operatör Destekleniyor
sum
sayı
max
min
avg
Toplama işlevleri

Windowing

Operatör Destekleniyor
Tumbling
Sliding
Oturum Desteklenmiyor

Deduplication

Operatör Destekleniyor
KopyalarıKaldır ✓ (durum sınırsız)
dropDuplicatesWithinWatermark Desteklenmiyor

Tabloya katılma akışı

Operatör Destekleniyor
Tablo birleştirmeyi yayınlama (tablo küçük olmalıdır)
Akışa katılma akışı Desteklenmiyor
(düz)MapGroupsWithState Desteklenmiyor
transformWithState ✓ (bazı farklılıklarla)
birleşim ✓ (bazı sınırlamalarla)
forEach
forEachBatch Desteklenmiyor
mapPartitions Desteklenmiyor (sınırlamaya bakın)

Dikkat edilmesi gereken özel noktalar

Bazı işleçler ve özellikler gerçek zamanlı modda kullanıldığında dikkat edilmesi gereken belirli noktalara veya farklılıklara sahiptir.

transformWithState gerçek zamanlı modda

Databricks, durum bilgisi olan özel uygulamalar oluşturmak için Apache Spark Yapılandırılmış Akış'ta bir API'yi destekler transformWithState. API ve kod parçacıkları hakkında daha fazla bilgi için bkz. Durum bilgisi olan özel bir uygulama oluşturma .

Ancak, API'nin gerçek zamanlı modda davranışı ile mikro toplu iş mimarisinden yararlanan geleneksel akış sorguları arasında bazı farklılıklar vardır.

  • Gerçek zamanlı mod, her satır için handleInputRows(key: String, inputRows: Iterator[T], timerValues: TimerValues) yöntemini çağırır.
    • Yineleyici inputRows tek bir değer döndürür. Mikro toplu iş modu bunu her anahtar için bir kez çağırır ve inputRows yineleyici, mikro toplu işteki bir anahtarın tüm değerlerini döndürür.
    • Kodunuzu yazarken bu farkı hesaplayın
  • Olay zamanı zamanlayıcıları gerçek zamanlı modda desteklenmez.
  • transformWithStateInPandas gerçek zamanlı modda desteklenmez. Bunun yerine pandas DataFrames yerine nesneleri kullanan transformWithState satır tabanlı Row API'yi kullanın.
  • Gerçek zamanlı modda, zamanlayıcıların çalışması veri gelişine bağlı olarak gecikir.
    • Süreölçer 10:00:00 olarak zamanlandıysa ancak veri gelmiyorsa zamanlayıcı hemen tetiklenmiyor.
    • Veriler 10:00:10'da ulaşırsa zamanlayıcı 10 saniyelik bir gecikmeyle tetikler.
    • Veri gelmezse ve uzun süreli çalışan toplu işlem sonlandırılmak üzereyse, toplu işlem sonlandırılmadan önce zamanlayıcı tetiklenir.

Uyarı

Databricks Runtime 18.1 ve altında, düşük aktarım hızına sahip Python için saniyede 5 kayıttan daha az transformWithState ve gerçek zamanlı mod kullanıyorsanız, birkaç yüz milisaniyeye kadar artan gecikme süreleri görebilirsiniz. Databricks, sorunu çözmek için Databricks Runtime 18.2 ve üzeri sürümlere yükseltmenizi önerir.

Python UDF'leri gerçek zamanlı modda

Databricks, Python kullanıcı tanımlı işlevlerin (UDF) çoğunu gerçek zamanlı modda destekler:

Durumsuz

UDF türü Destekleniyor
Python skaler UDF (Kullanıcı tanımlı skaler işlevler - Python)
Arrow skaler UDF
Pandas skaler UDF (pandas kullanıcı tanımlı işlevler)
Ok işlevi (mapInArrow)
Pandas işlevi (Harita)

Duruma duyarlı gruplandırma (UDAF)

UDF türü Destekleniyor
transformWithState (yalnızca Row arabirim)
transformWithStateInPandas Desteklenmiyor. Bunun yerine pandas DataFrames yerine nesneleri kullanan transformWithState satır tabanlı Row API'yi kullanın. Ayrıntılar için bkz transformWithStateInPandas . desteklenmiyor .
applyInPandasWithState Desteklenmiyor

Durum bilgisi olmayan gruplandırma (UDAF)

UDF türü Destekleniyor
apply Desteklenmiyor
applyInArrow Desteklenmiyor
applyInPandas Desteklenmiyor

Tablo işlevleri

UDF türü Destekleniyor
UDTF (Python kullanıcı tanımlı tablo işlevleri (UDF)) Desteklenmiyor
UC UDF Desteklenmiyor

Python UDF'leri gerçek zamanlı modda kullanırken dikkate alınması gereken birkaç nokta vardır:

  • Gecikme süresini en aza indirmek için Ok toplu iş boyutunu (spark.sql.execution.arrow.maxRecordsPerBatch) 1 olarak yapılandırın.
    • Fedakarlık: Bu yapılandırma, geçiş hızından ödün vererek gecikme süresini iyileştirir. Çoğu iş yükü için bu ayar önerilir.
    • Toplu iş boyutunu yalnızca giriş hacmine uyum sağlamak için daha yüksek bir aktarım hızı gerekiyorsa artırın ve gecikme süresindeki olası artışı kabul edin.
  • Pandas UDF'leri ve işlevleri, Arrow toplu iş boyutu 1 olduğunda iyi performans göstermemektedir.
    • Pandas UDF'leri veya işlevleri kullanıyorsanız, Arrow toplu iş boyutunu daha yüksek bir değere ayarlayın (örneğin, 100 veya daha fazla).
    • Bu, daha yüksek gecikme süresi anlamına gelir. Databricks mümkünse ok UDF veya işlev kullanılmasını önerir.
  • transformWithStateInPandas gerçek zamanlı modda desteklenmez. Bunun yerine pandas DataFrames yerine nesneleri kullanan transformWithState satır tabanlı Row API'yi kullanın. Satır tabanlı API'yi kullanan çalışan bir Python örneği için bkz. transformWithStateInPandas desteklenmiyor ve Real-time modu örnekleri.
  • UDF'leri olan gecikmeye duyarlı iş yükleri için Databricks ayrılmış erişim modunu kullanmanızı önerir. Standart erişim modunda güvenlik yalıtımı ek yükü UDF performansını yavaşlatabilir.