Gerçek zamanlı mod başvurusu

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)
Klasik üzerinde Lakeflow işlem hatları Yapılandırılmış Akış olarak desteklenmez. İşlem hattı yapılandırması aracılığıyla desteklenir. Bkz. Lakeflow işlem hatlarında gerçek zamanlı modu kullanma.
Sunucusuz üzerinde Lakeflow işlem hatları Yapılandırılmış Akış olarak desteklenmez. İşlem hattı yapılandırması aracılığıyla desteklenir. Bkz. Lakeflow işlem hatlarında gerçek zamanlı modu kullanma.
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
mapPartitions Desteklenmiyor (sınırlamaya bakın)
Union ✓ (bazı sınırlamalarla)

UDFs

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

Aggregation

İşlev Destekleniyor
sum
sayı
max
min
avg
Toplama işlevleri

Windowing

Operatör Destekleniyor
Tumbling
Sliding
Oturum Desteklenmiyor

Deduplication

Operatör Destekleniyor
KopyalarıKaldır
dropDuplicatesWithinWatermark

Tabloya katılma akışı

Operatör Destekleniyor
İç birleşim
Dış Birleşim
Tablo birleştirmeyi yayınlama (10 mb veya daha az tablo boyutu)
Tablo birleştirme (yayın olmadan) Desteklenmiyor

Akışa katılma akışı

Operatör Destekleniyor
İç birleşim ✓ (Databricks Runtime 18 ve üzeri, bazı yapılandırmalarla)
Dış birleşim Desteklenmiyor

Uyarı

Akışları gerçek zamanlı modda akışa almak için ek Spark yapılandırmaları ayarlamanız gerekir. Yapılandırmalar hakkında daha fazla bilgi edinmek ve birden çok akışı çalıştırma gereksinimleri için bkz . Akış birleştirmeleri için akış yapma.

Durum bilgisi olan rastgele işleç

Operatör Destekleniyor
(düz)MapGroupsWithState Desteklenmiyor
transformWithState ✓ (bazı farklılıklarla)

Kullanıcı tanımlı havuzlar

Sink Destekleniyor
forEach
forEachBatch Desteklenmiyor

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, gerçek zamanlı modda mikro toplu iş sorgularından farklı davranı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 (Python skaler kullanıcı tanımlı işlevler (UDF))
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 ayarlayı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.