Udostępnij za pośrednictwem


Przetwarzanie danych wsadowych vs strumieniowych w Azure Databricks

W tym artykule opisano kluczowe różnice między przetwarzaniem wsadowym i strumieniowym, dwiema różnymi semantykami przetwarzania danych używanymi na potrzeby obciążeń inżynieryjnych danych, w tym pozyskiwaniem, przekształcaniem i przetwarzaniem w czasie rzeczywistym.

Przesyłanie strumieniowe jest często kojarzone z niskimi opóźnieniami i ciągłym przetwarzaniem danych z magistrali komunikatów, takich jak Apache Kafka.

Jednak w usłudze Azure Databricks ma bardziej ekspansywną definicję. Podstawowy silnik potoków deklaratywnych Lakeflow (Apache Spark i Structured Streaming) ma ujednoliconą architekturę przetwarzania wsadowego i strumieniowego.

  • Silnik może traktować źródła, takie jak magazyn obiektów w chmurze i Delta Lake jako źródła przesyłania strumieniowego w celu wydajnego przetwarzania przyrostowego.
  • Przetwarzanie strumieniowe można uruchamiać zarówno w sposób wyzwalany, jak i ciągły, co zapewnia elastyczność w kontrolowaniu równowagi między kosztami a wydajnością obciążeń strumieniowych.

Poniżej przedstawiono podstawowe różnice semantyczne, które odróżniają przetwarzanie wsadowe i przetwarzanie strumieniowe, w tym ich zalety i wady oraz zagadnienia przy wyborze ich dla obciążeń roboczych.

Semantyka usługi Batch

W przypadku przetwarzania wsadowego silnik nie monitoruje, jakie dane są już przetwarzane w źródle. Wszystkie dane obecnie dostępne w źródle są przetwarzane w czasie przetwarzania. W praktyce źródło danych wsadowych jest zwykle partycjonowane logicznie, na przykład według dnia lub regionu, aby ograniczyć ponowne przetwarzanie danych.

Na przykład obliczenie średniej ceny sprzedaży pozycji, zagregowanej na poziomie godzinowym, dla zdarzenia sprzedaży uruchamianego przez firmę handlu elektronicznego można zaplanować jako przetwarzanie wsadowe w celu obliczenia średniej ceny sprzedaży co godzinę. W przypadku partii dane z poprzednich godzin są ponownie przetwarzane co godzinę, a wcześniej obliczone wyniki są zastępowane w celu odzwierciedlenia najnowszych wyników.

Przetwarzanie wsadowe

Semantyka strumieniowania

Podczas przetwarzania strumieniowego silnik śledzi, jakie dane są przetwarzane i przetwarza tylko nowe dane w kolejnych uruchomieniach. W powyższym przykładzie można zaplanować przetwarzanie strumieniowe zamiast przetwarzania wsadowego, aby obliczyć średnią cenę sprzedaży co godzinę. W przypadku przesyłania strumieniowego tylko nowe dane dodane do źródła od czasu ostatniego uruchomienia są przetwarzane. Nowo obliczone wyniki należy dołączyć do poprzednio obliczonych wyników, aby sprawdzić kompletne wyniki.

Przetwarzanie strumieniowe

Usługa Batch a przesyłanie strumieniowe

W powyższym przykładzie przesyłanie strumieniowe jest lepsze niż przetwarzanie wsadowe, ponieważ nie przetwarza tych samych danych przetworzonych w poprzednich uruchomieniach. Jednak przetwarzanie strumieniowe staje się bardziej złożone w scenariuszach, takich jak nieuporządkowane dane i spóźniony przyjazd danych do źródła.

Przykładem danych o późnym przybyciu jest sytuacja, gdy pewne dane sprzedaży z pierwszej godziny nie docierają do źródła aż do drugiej godziny.

  • W przypadku przetwarzania wsadowego dane późnego przybycia z pierwszej godziny zostaną przetworzone przy użyciu danych z drugiej godziny i istniejących danych z pierwszej godziny. Poprzednie wyniki z pierwszej godziny zostaną zastąpione i poprawione przy użyciu danych o opóźnionym przybyciu.
  • W przetwarzaniu strumieniowym dane przychodzące z opóźnieniem z pierwszej godziny zostaną przetworzone bez uwzględniania innych danych z pierwszej godziny, które już zostały przetworzone. Logika przetwarzania musi przechowywać informacje o sumie i liczbie z obliczeń średniej pierwszej godziny, aby poprawnie zaktualizować poprzednie wyniki.

Te złożoności przesyłania strumieniowego są zwykle wprowadzane, gdy przetwarzanie jest stanowe, takie jak łączenia, agregacje i deduplikacje.

W przypadku bezstanowego przetwarzania przesyłania strumieniowego, takiego jak dodawanie nowych danych ze źródła, obsługa danych, które przybywają poza kolejnością i z opóźnieniem, jest mniej złożona, ponieważ mogą one być dodawane do poprzednich wyników w miarę ich przybywania ze źródła.

W poniższej tabeli przedstawiono zalety i wady przetwarzania wsadowego i przesyłania strumieniowego oraz różne funkcje produktów, które obsługują te dwa semantyki przetwarzania w usłudze Databricks Lakeflow.

Porcja Przesyłanie strumieniowe
Zalety
  • Logika przetwarzania jest prosta.
  • Wyniki są zawsze dokładne i odzwierciedlają wszystkie dostępne dane w źródle.
  • Wydajne, tylko nowe dane są przetwarzane.
  • Szybsze działanie może obsłużyć wymagania dotyczące opóźnień od godzin do minut, sekund i milisekund.
Minusy
  • Nie jest to zbyt wydajne; dane zostaną ponownie przetworzone w określonej partycji wsadowej.
  • Wolniejsze rozwiązania mogą obsługiwać wymagania dotyczące opóźnień od godzin do minut, ale nie sekund ani milisekund.
  • Logika przetwarzania może być złożona, szczególnie w przypadku przetwarzania stanowego, takiego jak sprzężenia, agregacje, deduplikacje itp.
  • Wyniki nie zawsze mogą być dokładne, biorąc pod uwagę dane dotyczące braku zamówienia i późnego przybycia.
Produkty inżynieryjne danych

Rekomendacje

W poniższej tabeli przedstawiono zalecaną semantyka przetwarzania na podstawie cech obciążeń przetwarzania danych w każdej warstwie architektury medalonu.

Warstwa medalionu Charakterystykę obciążenia Rekomendacja
Brąz
  • Obciążenia związane z przetwarzaniem danych.
  • Zwykle obejmuje brak przetwarzania lub przetwarzanie bezstanowe dla przyrostowego dołączania danych ze źródeł.
  • Rozmiar danych jest zwykle większy.
  • Przetwarzanie strumieniowe jest ogólnie lepszym wyborem, biorąc pod uwagę, że użytkownicy mogą korzystać z zalet strumieniowania, ale nie są narażeni na złożoność stanowego przetwarzania strumieniowego.
Srebro
  • Przekształcenia obciążeń.
  • Zazwyczaj obejmuje przetwarzanie bezstanowe, takie jak filtrowanie i przetwarzanie stanowe, takie jak sprzężenia, agregacje i deduplikacje.
  • Użyj przetwarzania wsadowego (z odświeżaniem przyrostowym w zmaterializowanych widokach), aby uniknąć złożoności przetwarzania strumieniowego stanowego.
  • Użyj przetwarzania strumieniowego jako opcji dla przypadków użycia, w których wydajność i opóźnienie jest znacznie ważniejsze niż dokładność wyników. Należy pamiętać o złożoności wprowadzonych przez stanowe przetwarzanie przesyłania strumieniowego.
Złoto
  • Obciążenia agregacji na ostatnim etapie.
  • Zazwyczaj obejmuje przetwarzanie stanowe, takie jak sprzężenia i agregacje.
  • Rozmiar danych jest zazwyczaj mniejszy.
  • Użyj przetwarzania wsadowego (z odświeżaniem przyrostowym w zmaterializowanych widokach), aby uniknąć złożoności przetwarzania strumieniowego stanowego.