Valós idejű mód referenciája

Támogatott nyelvek

A valós idejű mód támogatja a Scalát, a Java és a Python.

Számítási típusok

A valós idejű mód a következő számítási típusokat támogatja:

Számítási típus Támogatott
Dedikált (korábban: egyfelhasználós) ✓
Standard (korábban: megosztott) ✓ (csak Python)
Lakeflow-folyamatok klasszikus rendszeren Strukturált streamelésként nem támogatott. A folyamatkonfigurációval támogatott. Lásd: Valós idejű mód használata a Lakeflow-folyamatokban.
Lakeflow-folyamatok kiszolgáló nélküli rendszeren Strukturált streamelésként nem támogatott. A folyamatkonfigurációval támogatott. Lásd: Valós idejű mód használata a Lakeflow-folyamatokban.
Kiszolgáló nélküli Nem támogatott

Az UDF-ekkel rendelkező késésre érzékeny számítási feladatok esetében a Databricks azt javasolja, hogy dedikált hozzáférési módot használjon. Lásd : Táblafüggvények.

Végrehajtási módok

A valós idejű mód csak a frissítési módot támogatja:

Végrehajtási mód Támogatott
Frissítési mód ✓
Append mode Nem támogatott
Teljes mód Nem támogatott

Források és nyelők

A valós idejű mód a következő forrásokat és fogadókat támogatja:

Forrás vagy fogadó Forrásként Fogadóként
Apache Kafka ✓ ✓
Event Hubs (Kafka-összekötő használatával) ✓ ✓
Kinesis ✓ (EFO mód ajánlott) Nem támogatott
AWS MSK ✓ Nem támogatott
Delta Nem támogatott Nem támogatott
Google Pub/Sub (üzenetkezelő rendszer) Nem támogatott Nem támogatott
Apache Pulsar Nem támogatott Nem támogatott
Tetszőleges fogadók (használatával forEachWriter) Nem alkalmazható ✓

Működtetők

A valós idejű mód a legtöbb strukturált streamszolgáltatót támogatja:

Állapot nélküli műveletek

Operátor Támogatott
Szelekció ✓
Vetület ✓
mapPartitions Nem támogatott (lásd a korlátozást)
Union ✓ (bizonyos korlátozásokkal)

UDFs

Operátor Támogatott
Scala UDF ✓ (bizonyos korlátozásokkal)
Python UDF ✓ (bizonyos korlátozásokkal)

Aggregation

Függvény Támogatott
sum ✓
számláló ✓
max ✓
min ✓
avg ✓
Aggregációs függvények ✓

Windowing

Operátor Támogatott
Zuhanás ✓
Csúszó ✓
Session Nem támogatott

Deduplication

Operátor Támogatott
dropDuplicates ✓
DuplikátumokEltávolításaVízjelhatáronBelül ✓

Streamelés táblázathoz illesztésbe

Operátor Támogatott
Belső illesztés ✓
Külső illesztés ✓
Szórástábla illesztése (a táblázat mérete 10 MB vagy kisebb) ✓
Táblaillesztés (közvetítés nélkül) Nem támogatott

Streamelés csatlakozás streameléshez

Operátor Támogatott
Belső illesztés ✓ (Databricks Runtime 18 LTS és újabb, néhány konfigurációval)
Külső illesztés Nem támogatott

Megjegyzés:

Ha valós idejű módban szeretné streamelni az illesztéseket, további Spark-konfigurációkat kell beállítania. A konfigurációkról és a több stream futtatásának követelményeiről további információt a Stream to stream illesztések című témakörben talál.

Tetszőleges állapotalapú operátor

Operátor Támogatott
(lapos)MapGroupsWithState Nem támogatott
transformWithState ✓ (néhány különbséggel)

Felhasználó által definiált fogadók

Sink Támogatott
forEach ✓
forEachBatch Nem támogatott

Különleges szempontok

Egyes operátorok és funkciók konkrét szempontokat vagy különbségeket tartalmaznak, ha valós idejű módban használják.

transformWithState valós idejű módban

Az egyéni állapotalapú alkalmazások létrehozásához a Databricks támogatja transformWithStateaz Apache Spark strukturált streamelési API-ját. További információért az API-ról és a kódrészletekről lásd: Build egy custom stateful application with with with (Build egy custom stateful application) transformWithState oldalra.

Az API azonban másként viselkedik valós idejű módban, mint a mikroköteges lekérdezésekben.

  • A valós idejű mód az handleInputRows(key: String, inputRows: Iterator[T], timerValues: TimerValues) metódust hívja meg minden egyes sorra.
    • Az inputRows iterátor egyetlen értéket ad vissza. A mikroköteg mód minden kulcshoz egyszer meghívja, és az inputRows iterátor a mikro kötegben lévő kulcs összes értékét visszaadja.
    • A kód írásakor ezt a különbséget figyelembe kell venni
  • Az eseményidőzítők nem támogatottak valós idejű módban.
  • transformWithStateInPandas valós idejű módban nem támogatott. Használja inkább a soralapú transformWithState API-t, amely objektumokat használ Row a pandas DataFrame-ek helyett.
  • Valós idejű módban az időzítők az adatérkezéstől függően késleltetik a tüzelést:
    • Ha egy időzítő 10:00:00-ra van ütemezve, de nem érkezik adat, az időzítő nem aktiválódik azonnal.
    • Ha az adatok 10:00:10-kor érkeznek, az időzítő 10 másodperces késéssel aktiválódik.
    • Ha nem érkezik adat, és a hosszan futó köteg leáll, az időzítő a köteg leállása előtt aktiválódik.

Megjegyzés:

A Databricks Runtime 18.1-es és újabb verzióiban, ha transformWithState és valós idejű módot használ alacsony átviteli sebességgel rendelkező Python, másodpercenként 5 rekordnál kevesebbet, akkor akár néhány száz ezredmásodpercnyi késés is előfordulhat. A Databricks azt javasolja, hogy a probléma megoldásához frissítsen a Databricks Runtime 18.2-re vagy újabb verzióra.

Python UDF-ek valós idejű módban

A Databricks támogatja a Python felhasználó által definiált függvények (UDF-ek) többségét valós idejű módban:

Állapot nélküli

UDF-típus Támogatott
Python skaláris UDF (Python skaláris felhasználó által definiált függvények (UDF-ek)) ✓
Nyíl skaláris UDF ✓
Pandas skaláris UDF (pandas felhasználó által definiált függvények) ✓
Nyíl függvény (mapInArrow) ✓
Pandas függvény (Térkép) ✓

Állapotalapú csoportosítás (UDAF)

UDF-típus Támogatott
transformWithState (csak Row interfész) ✓
transformWithStateInPandas Nem támogatott. Használja inkább a soralapú transformWithState API-t, amely objektumokat használ Row a pandas DataFrame-ek helyett. A részletekért lásd transformWithStateInPandas : nem támogatott .
applyInPandasWithState Nem támogatott

Állapot nélküli csoportosítás (UDAF)

UDF-típus Támogatott
apply Nem támogatott
applyInArrow Nem támogatott
applyInPandas Nem támogatott

Táblafüggvények

UDF-típus Támogatott
UDTF (Python felhasználó által definiált táblafüggvények (UDTF-ek)) Nem támogatott
UC UDF Nem támogatott

A Python UDF-ek valós idejű módban való használatakor több szempontot is figyelembe kell venni:

  • A késés minimalizálása érdekében állítsa a Nyíl köteg méretét (spark.sql.execution.arrow.maxRecordsPerBatch) 1-re.
    • Kompromisszum: Ez a konfiguráció az átviteli sebesség rovására optimalizálja a késést. A legtöbb számítási feladat esetében ez a beállítás ajánlott.
    • Csak akkor növelje meg a köteg méretét, ha nagyobb átviteli sebességre van szükség a bemeneti kötet kezeléséhez, és elfogadja a lehetséges késésnövekedést.
  • A Pandas UDF-ek és függvények gyengén teljesítenek, ha az Arrow kötegmérete 1.
    • Ha pandas UDF-eket vagy függvényeket használ, állítsa az Arrow csomagméretet magasabb értékre (például 100 vagy annál magasabbra).
    • Ez nagyobb késést jelent. A Databricks egy nyíl UDF vagy függvény használatát javasolja, ha lehetséges.
  • transformWithStateInPandas valós idejű módban nem támogatott. Használja inkább a soralapú transformWithState API-t, amely objektumokat használ Row a pandas DataFrame-ek helyett. Az transformWithStateInPandas nem támogatott és Real-time módú példák a soralapú API-t használó működő Python példához.
  • Az UDF-ekkel rendelkező késésre érzékeny számítási feladatok esetében a Databricks azt javasolja, hogy dedikált hozzáférési módot használjon. Standard hozzáférési módban a biztonsági elkülönítés többletterhelése lelassíthatja az UDF teljesítményét.