Sdílet prostřednictvím


Jak vytvářet jednoduché, efektivní a s nízkou latencí datové kanály

Dnešní firmy řízené daty neustále vytvářejí data, což vyžaduje inženýrství datových toků, které nepřetržitě přijímají a transformují tato data. Tyto kanály by měly být schopné zpracovávat a dodávat data přesně jednou, dosahovat výsledků s latencí menší než 200 milisekund a vždy se snažit minimalizovat náklady.

Tento článek popisuje přístupy ke zpracování datových proudů dávkově a přírůstkově pro datové kanály v inženýrství, proč je lepší volbou přírůstkové zpracování datových proudů a další kroky pro zahájení práce s možnostmi přírůstkového zpracování datových proudů na platformě Databricks, Streamování v Azure Databricks a Co je DLT?. Tyto funkce umožňují rychle psát a spouštět kanály, které zaručují sémantiku doručení, latenci, náklady a další.

Nástrahy opakovaně se opakujících dávkových úloh

Při nastavování datového potrubí můžete nejprve vytvářet opakované dávkové úlohy pro zpracování dat. Například každou hodinu můžete spustit úlohu Sparku, která čte ze zdroje a zapisuje data do jímky, jako je Delta Lake. Problém s tímto přístupem je přírůstkově zpracovávat váš zdroj, protože úloha Sparku, která se spouští každou hodinu, musí začít tam, kde skončila poslední. Můžete zaznamenat nejnovější časové razítko dat, která jste zpracovali, a pak vybrat všechny řádky s časovými razítky, které jsou novější než toto časové razítko, ale existují nástrahy:

Pokud chcete spustit průběžný datový tok, můžete se pokusit naplánovat hodinovou dávkovou úlohu, která přírůstkově čte z vašeho zdroje, provádí transformace a zapíše výsledek do cílového úložiště, jako je Delta Lake. Tento přístup může mít nástrahy:

  • Úloha Sparku, která se dotazuje na všechna nová data po časovém razítku, vynechá pozdní data.
  • Úloha Sparku, která selže, může vést k porušení garancí přesného provedení, pokud není pečlivě ošetřena.
  • Úloha Sparku, která uvádí obsah umístění cloudového úložiště, aby našla nové soubory, bude nákladná.

Pak je stále potřeba tato data opakovaně transformovat. Můžete napsat opakující se dávkové úlohy, které pak agregují data nebo aplikují jiné operace, což dále komplikuje a snižuje efektivitu rozvodné sítě.

Příklad dávky

Pokud chcete plně porozumět úskalím dávkového zpracování a transformace v rámci vašeho datového toku, zvažte následující příklady.

Zmeškaná data

Pokud máte téma Kafka s daty o využití, která určují, kolik účtovat zákazníkům, a vaše datové potrubí zpracovává data v dávkách, může posloupnost událostí vypadat takto:

  1. První dávka má dva záznamy v 8:00 a 8:30.
  2. Aktualizujete čas na 8:30 ráno.
  3. Dostanete další záznam v 8:15 ráno.
  4. Vaše dotazy z druhé várky na všechno po 8:30 , protože promeškáte zápis v 8:15.

Kromě toho nechcete přeúčtovat nebo nedoúčtovat své uživatele, proto musíte zajistit, že každý záznam zpracováváte pouze jednou.

Redundantní zpracování

Dále předpokládejme, že vaše data obsahují řádky uživatelských nákupů a chcete agregovat prodeje za hodinu, abyste věděli nejoblíbenější časy ve vašem obchodě. Pokud nákupy na stejnou hodinu přicházejí do různých dávek, budete mít více dávek, které generují výstupy za stejnou hodinu.

příklad ingestování dávkově

Má časové okno od 8:00 do 9:00 dva prvky (výstup z dávky 1), jeden prvek (výstup z dávky 2), nebo tři prvky (pokud není žádný výstup z žádné dávky)? Data potřebná k vytvoření daného časového intervalu se zobrazí v několika dávkách transformace. Pokud chcete tento problém vyřešit, můžete data rozdělit podle dne a znovu zpracovat celý oddíl, když potřebujete vypočítat výsledek. Potom můžete výsledky ve své jímce přepsat:

příklad příjmu dat služby Batch

To však přichází na úkor latence a nákladů, protože druhá dávka musí vykonávat zbytečnou práci při zpracování dat, která možná už dříve zpracovala.

Žádné nástrahy s přírůstkovým zpracováním datových proudů

Postupné zpracování datových proudů usnadňuje vyhnout se všem nástrahám opakovaných dávkových úloh při přijímání a transformaci dat. Databricks strukturované streamování a DLT spravují složitosti implementace streamování, aby vám umožnily soustředit se pouze na vaši obchodní logiku. Stačí zadat, ke kterému zdroji se připojit, k jakým transformacím se mají data provádět a kam se má výsledek zapisovat.

Přírůstkový příjem dat

Přírůstkové příjem dat v Databricks využívá strukturované streamování Apache Sparku, které může přírůstkově využívat zdroj dat a zapisovat je do jímky. Modul strukturovaného streamování může zpracovávat data přesně jednou a modul dokáže zpracovat data mimo pořadí. Modul lze spustit buď v poznámkových blocích, nebo pomocí streamovaných tabulek v DLT.

Modul strukturovaného streamování v Databricks poskytuje proprietární zdroje streamování, jako je autoloader, které můžou přírůstkově zpracovávat cloudové soubory nákladově efektivním způsobem. Databricks také poskytuje konektory pro další oblíbené sběrnice zpráv, jako jsou Apache Kafka, Amazon Kinesis, Apache Pulseara Google Pub/Sub.

Přírůstková transformace

Postupná transformace v Databricks se Structured Streaming umožňuje zadat transformace do datových rámců se stejným API jako u dávkových dotazů, ale sleduje data napříč dávkami a agregovanými hodnotami v průběhu času, takže to již nemusíte dělat. Nikdy není nutné znovu zpracovávat data, takže je rychlejší a nákladově efektivnější než opakované dávkové úlohy. Strukturované streamování vytváří datový proud, který může připojit k jímce, jako je Delta Lake, Kafka nebo jakýkoli jiný podporovaný konektor.

Materializované pohledy v DLT jsou poháněny Enzyme motorem. Enzym stále postupně zpracovává váš zdroj, ale místo vytváření streamu vytvoří materializovaný pohled, což je předem vypočítaná tabulka, která ukládá výsledky dotazu, který jí poskytnete. Enzym dokáže efektivně určit, jak nová data ovlivňují výsledky dotazu, a udržuje předem vypočítanou tabulku up-to-date.

Materializovaná zobrazení vytvářejí zobrazení nad agregací, která se vždy efektivně aktualizuje, takže například ve výše popsaném scénáři víte, že okno 8:00 do 9:00 má tři prvky.

Strukturované streamování nebo DLT?

Významným rozdílem mezi strukturovaným streamováním a DLT je způsob, jakým zprovozňujete dotazy streamování. Ve strukturovaném streamování ručně zadáte řadu konfigurací a budete muset dotazy ručně spojovat. Musíte explicitně spouštět dotazy, čekat na jejich ukončení, zrušit je při selhání a další akce. V DLT deklarativně zadáte DLT své pipeline ke spuštění a udržuje je v chodu.

DLT má také funkce, jako jsou materializovaná zobrazení, které efektivně a přírůstkově předpočítávají transformace vašich dat.

Další informace o těchto funkcích najdete v tématu Streamování v Azure Databricks a Co je DLT?.

Další kroky