Újraparticionálás használata a feldolgozás optimalizálásához az Azure Stream Analytics használatával

Ez a cikk bemutatja, hogyan lehet újraparticionálással skálázni az Azure Stream Analytics-lekérdezést olyan forgatókönyvek esetében, amelyek nem teljes mértékben párhuzamosak.

Előfordulhat, hogy nem tudja használni a párhuzamosítást , ha:

  • A bemeneti stream partíciókulcsa nem szabályozható.
  • A forrás elosztja a bemenetet több partícióra, amelyeket később egyesíteni kell.

Az újraparticionálásra vagy újrabontásra akkor van szükség, ha olyan adatfolyamon dolgoz fel adatokat, amelyek nem egy természetes bemeneti séma szerint vannak skálázva, például az Event Hubs Partícióazonosítója . Az újraparticionáláskor minden szegmens egymástól függetlenül is feldolgozható, így lineárisan horizontálisan felskálázhatja a streamelési folyamatot.

Hogyan végezzünk újraparticionálást?

Be lehet osztani a bemenetet kétféleképpen:

  1. Használjon egy külön Stream Analytics-feladatot, amely elvégzi az újraparticionálást
  2. Használjon egyetlen feladatot, de először hajtsa végre az újraparticionálást az egyéni elemzési logika előtt.

Külön Stream Analytics-feladat létrehozása az újraparticionálási bemenethez

Létrehozhat egy feladatot, amely beolvassa a bemenetet, és egy partíciókulcs használatával ír egy eseményközpont kimenetére. Ez az eseményközpont ezután egy másik Stream Analytics-feladat bemeneteként szolgálhat, ahol az elemzési logikát implementálja. Amikor konfigurálja ezt az eseményközpont kimenetét a feladatban, meg kell adnia azt a partíciókulcsot, amellyel a Stream Analytics újraparticionálja az adatokat.

-- For compat level 1.2 or higher
SELECT * 
INTO output
FROM input

--For compat level 1.1 or lower
SELECT *
INTO output
FROM input PARTITION BY PartitionId

Újraparticionálja a bemenetet egyetlen Stream Analytics-munkafolyamaton belül

A lekérdezésben egy olyan lépést is bevezethet, amely először újrapartitálja a bemenetet, amelyet aztán a lekérdezés más lépései is használhatnak. Ha például a DeviceId alapján szeretné újraparticionálást végezni, a lekérdezés a következő lesz:

WITH RepartitionedInput AS 
( 
    SELECT * 
    FROM input PARTITION BY DeviceID
)

SELECT DeviceID, AVG(Reading) as AvgNormalReading  
INTO output
FROM RepartitionedInput  
GROUP BY DeviceId, TumblingWindow(minute, 1)  

Az alábbi példalekérdezés két újraparticionált adatfolyamot illeszt össze. Ha két újraparticionált adatfolyamot csatlakoztat, a streameknek ugyanazzal a partíciókulcsmal és ugyanannyi partícióval kell rendelkezniük. Az eredmény egy stream, amely ugyanazzal a partíciós sémával rendelkezik.

WITH step1 AS 
(
    SELECT * FROM input1 
    PARTITION BY DeviceID
),
step2 AS 
(
    SELECT * FROM input2 
    PARTITION BY DeviceID
)

SELECT * INTO output 
FROM step1 PARTITION BY DeviceID 
UNION step2 PARTITION BY DeviceID

A kimeneti sémának meg kell egyeznie a streampartíció kulcsával és a partíciók számával, hogy az egyes alstreamek egymástól függetlenül kiüríthetők legyenek. A streamet a kiürítés előtt egy másik séma is egyesítheti és újraparticionálta, de kerülnie kell ezt a módszert, mert növeli a feldolgozás általános késését, és növeli az erőforrás-kihasználtságot.

Streamelési egységek újraparticionálásokhoz

Kísérletezzen, és figyelje meg a feladat erőforrás-használatát a szükséges partíciók pontos számának meghatározásához. A streamelési egységek számát (SU) az egyes partíciókhoz szükséges fizikai erőforrásoknak megfelelően kell módosítani. Általában hat SU szükséges minden partícióhoz. Ha nincs elegendő erőforrás hozzárendelve a feladathoz, a rendszer csak akkor alkalmazza az újrapartíciót, ha az előnyös a feladat számára.

SQL-kimenet újrapartíciói

Amikor a munkád SQL-adatbázist használ a kimenethez, használjon explicit újraparticionálást az optimális partíciószám eléréséhez, hogy maximalizálja a feldolgozási teljesítményt. Mivel az SQL nyolc íróval működik a legjobban, a folyamat újraparticionálása nyolc részre az adatok kiürítése előtt, vagy valahol a feldolgozás korábbi szakaszában, előnyös lehet a munkafolyamat teljesítménye szempontjából.

Ha nyolcnál több bemeneti partíció van, előfordulhat, hogy a bemeneti particionálási séma öröklése nem megfelelő választás. Fontolja meg az INTO használatát a lekérdezésben a kimeneti írók számának explicit megadásával.

Az alábbi példa beolvassa a bemenetet, függetlenül attól, hogy az természetes módon particionált-e, és a DeviceID dimenziónak megfelelően tízszeresére bontja újra a streamet, és az adatokat a kimenetbe öblíti.

SELECT * INTO [output] 
FROM [input] 
PARTITION BY DeviceID INTO 10

További információ: Azure Stream Analytics-kimenet az Azure SQL Database-ben.

Következő lépések