Głównie specjalizuję się w budowaniu procesów ETL odpowiedzialnych za integracje różnych źródeł danych za pomocą Apache NiFi.
  • Budowa prostego i automatycznego przepływu danych

Apache NiFi 2.0.0: Kluczowe funkcje i zmiany

Wydanie wersji Apache NiFi 2.0.0-M4 jest czwartym kamieniem milowy w przełomowej wersji 2.0.0 i stanowi ono istotny krok naprzód, wprowadzając szereg znaczących zmian i ulepszeń. Nie tylko rozszerza możliwości i wydajność platformy, ale także dostarcza nowe narzędzia i technologie, które mogą zrewolucjonizować sposób, w jaki organizacje zarządzają i przetwarzają swoje dane. W tym artykule przyjrzymy się głównym zmianom w Apache NiFi 2.0.0-M4, poznamy nowe funkcje i usprawnienia oraz jak mogą one wpłynąć na projektowanie przepływów danych.

Kluczowe zmiany w Apache NiFi 2.0.0

Java

Nadszedł czas na pożegnanie się z Javą 8 i przywitanie nowej ery z Javą 21, która będzie jedyną wspieraną wersją dla Apache NiFi 2.0.0. Zmiana ta oznacza, że NiFi będzie działać szybciej, bezpieczniej i bardziej efektywnie, dzięki najnowszym technologiom i ulepszeniom wprowadzonym w Javie 21. To krok naprzód, który pozwoli użytkownikom w pełni korzystać z nowoczesnych możliwości przetwarzania danych i zapewni lepsze wsparcie dla przyszłych innowacji. W mojej opinii interesująca i warta przytoczenia jest funkcja Virtual Threads, która została zaimplementowana w tym wydaniu Java, a jest szeroko opisywana przez specjalistów jako przełomowa funkcja w świecie programowania współbieżnego. Dla przetwarzania z wykorzystaniem Apache NiFi uruchomionego na Java 21 znaczy to tylko jedno, że zasoby sprzętowe są wykorzystywane efektywniej, a przepływy danych działają ze zwiększoną wydajnością. Dla spragnionych większej dawki informacji zamieszczam kompletny przewodnik po Java 21.

Python

Apache NiFi 2.0.0 wprowadził znaczące usprawnienia w integracji z Pythonem, co stanowi duży krok naprzód dla użytkowników wykorzystujących ten język do przetwarzania i analizy danych. Nowy mechanizm rozszerzeń Python pozwala na tworzenie natywnych procesorów opartych na Pythonie, które mogą być wdrażane i zarządzane obok tradycyjnych procesorów opartych na Javie w NiFi.

Kluczowe funkcje integracji Pythona w NiFi 2.0.0:

  1. Natywne procesory Python: Apache NiFi 2.0.0 umożliwia tworzenie procesorów opartych na Pythonie, które mogą być wdrażane bezpośrednio w ekosystemie NiFi. Procesory te działają w swoich własnych wirtualnych środowiskach Pythona, co pozwala na korzystanie z dowolnych pakietów Pythona
  2. Implementacja i zarządzanie: Aby wdrożyć rozszerzenie Pythona, wystarczy skopiować skrypt procesora Python do odpowiedniego katalogu w kontenerze NiFi. Nowy procesor pojawi się w interfejsie webowym NiFi po odświeżeniu, bez potrzeby ponownego uruchamiania NiFi
  3. Integracja z API NiFi: Nowe API NiFi dla Pythona umożliwia manipulację danymi FlowFile za pomocą metod takich jak getContentsAsBytes, getContentsAsReader, czy getAttributes. Pozwala to na wydajną pracę z danymi wewnątrz NiFi z wykorzystaniem Pythona
  4. Transformacje FlowFile: Procesory Python w NiFi mogą operować na danych FlowFile poprzez implementację metod transformacji. Przykładowy kod w Pythonie może wyglądać następująco:
from nifiapi.flowfiletransform import FlowFileTransform, FlowFileTransformResult

class WriteHelloWorld(FlowFileTransform):
    class Java:
        implements = ['org.apache.nifi.python.processor.FlowFileTransform']

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def transform(self, context, flowfile):
        input = flowfile.getContentsAsBytes().decode()
        output = f"Hello, {input}"
        return FlowFileTransformResult(
            relationship="success",
            contents=output,
            attributes={"greeting": "hello"}
        )

Interfejs graficzny

interfejs graficzny apache nifi 2.0.0
WebUI Apache NiFi 2.0.0

Apache NiFi 2.0.0 wprowadza istotne zmiany w interfejsie graficznym użytkownika, które znacząco poprawiają jego funkcjonalność i użyteczność. Nowy interfejs został zaprojektowany z myślą o lepszej wydajności i bardziej intuicyjnym doświadczeniu użytkownika.

Kluczowe ulepszenia interfejsu graficznego w NiFi 2.0.0:

  1. Nowoczesny design: Interfejs został zaktualizowany, aby być bardziej nowoczesnym i przyjaznym dla użytkownika. Poprawiono wygląd i układ elementów, co ułatwia nawigację i zarządzanie przepływami danych
  2. Poprawiona wydajność: Nowy interfejs jest bardziej responsywny i szybki, co szczególnie widać przy zarządzaniu dużymi przepływami danych. Optymalizacje w kodzie i architekturze sprawiają, że interakcje z systemem są płynniejsze​
  3. Nowe funkcjonalności: Dodano nowe funkcje, które zwiększają możliwości NiFi w zakresie zarządzania danymi. Ulepszono m.in. zarządzanie przepływami i monitorowanie wydajności, włączanie i wyłączanie kontrolerów oraz czyszczenie kolejek z FlowFile można teraz zrealizować za pomocą zaledwie dwóch kliknięć myszki na poziomie Process Group
interfejs graficzny apache nifi 2.0.0
Nowe funkcje do zarządzania Process Group

Integracja z GitHub

Apache NiFi 2.0.0 wprowadza nową integrację z GitHub, która znacząco ułatwia zarządzanie przepływami pracy i wersjonowaniem. Nowe funkcje pozwalają użytkownikom na bezpośrednie połączenie z repozytoriami GitHub, co umożliwia synchronizację zmian w przepływach pracy oraz łatwe śledzenie historii zmian.

Kluczowe funkcje integracji z GitHub:

  1. Bezpośrednie połączenie z repozytoriami: Użytkownicy mogą teraz bezpośrednio łączyć się z repozytoriami GitHub, co upraszcza proces zarządzania wersjami przepływów pracy
  2. Automatyczne śledzenie zmian: Integracja umożliwia automatyczne śledzenie zmian w przepływach pracy, co pomaga w zarządzaniu wersjami i zapobiega konfliktom
  3. Łatwe odzyskiwanie poprzednich wersji: Dzięki integracji z GitHub, użytkownicy mogą łatwo przywracać poprzednie wersje przepływów pracy, co jest szczególnie przydatne w przypadku błędów lub konieczności analizy poprzednich stanów systemu
  4. Centralne zarządzanie: Wszystkie zmiany w przepływach pracy mogą być zarządzane centralnie poprzez repozytoria GitHub, co zwiększa przejrzystość i ułatwia współpracę zespołową, dodana została również obsługa gałęzi (branch)
interfejs graficzny apache nifi 2.0.0
Integracja Apache NiFi 2.0.0 z GitHub

Wycofane funkcje i komponenty w Apache NiFi 2.0.0

Zmienne i rejestr zmiennych

Apache NiFi 2.0.0 wprowadza istotne zmiany, usuwając rejestr zmiennych i same zmienne. Ta decyzja wynika z ograniczeń związanych z dotychczasowym mechanizmem, takich jak potrzeba wsparcia języka wyrażeń (Expression Language) oraz brak możliwości bezpiecznego przechowywania wartości wrażliwych. Nowe podejście, oparte na kontekstach parametrów (Parameter Contexts), zapewnia większe możliwości i bezpieczeństwo. Integracja z usługami typu AWS Secrets Manager, Azure Key Vault Secrets, GCP Secret Manager oraz HashiCorp Vault, pozwala na zarządzanie parametrami z zewnętrznych źródeł oraz lepszą organizację przepływów pracy​.

Kluczowe funkcje i korzyści wynikające z tej zmiany:

  1. Bezpieczeństwo: Konteksty parametrów pozwalają na bezpieczne przechowywanie wartości wrażliwych, co poprawia ogólne bezpieczeństwo systemu.
  2. Zaawansowane funkcje: Konteksty parametrów są wspierane w NiFi od dłuższego czasu i zostały znacząco udoskonalone. Teraz oferują zaawansowane funkcje, takie jak możliwość pobierania wartości parametrów z zewnętrznych źródeł, na przykład HashiCorp Vault czy dostawcy chmur.
  3. Łatwiejsza parametryzacja: Parametryzacja przepływów jest teraz bardziej intuicyjna i mniej podatna na błędy. Użytkownicy mogą łatwo tworzyć i zarządzać parametrami w kontekstach parametrów.
  4. Podział i dziedziczenie parametrów: Użytkownicy mogą podzielić parametry na różne konteksty i używać dziedziczenia między nimi, co pozwala na współdzielenie tych samych parametrów w różnych przypadkach użycia.
  5. Lepsza wydajność: Uproszczenie systemu poprzez usunięcie zmiennych może prowadzić do poprawy wydajności i stabilności systemu
  6. Uproszczenie interfejsu: Usunięcie zmiennych upraszcza interfejs użytkownika i zmniejsza złożoność zarządzania przepływami danych.
  7. Wymaganie języka wyrażeń: Zmienne wymagały wsparcia języka wyrażeń (Expression Language) do odwoływania się do nich w właściwościach, co było skomplikowane i ograniczało elastyczność.

Szablony

Apache NiFi 2.0.0 wprowadza istotne zmiany, w tym usunięcie szablonów (templates). Decyzja ta została podjęta ze względu na liczne ograniczenia i problemy związane z przechowywaniem szablonów w pamięci oraz w zdefiniowanym przepływie (flow.xml.gz oraz flow.json.gz). Szczególnie dla użytkowników posiadających dziesiątki lub setki dużych szablonów, usunięcie tej funkcjonalności znacząco poprawi stabilność i wykorzystanie pamięci w NiFi.

Kluczowe funkcje i korzyści wynikające z tej zmiany:

  1. Zmniejszone obciążenie pamięci: Usunięcie szablonów eliminuje konieczność przechowywania dużych plików XML w pamięci, co znacznie poprawia stabilność i wydajność systemu..
  2. Zintegrowane zarządzanie: Używanie NiFi Registry do przechowywania i wersjonowania przepływów umożliwia łatwiejsze udostępnianie i ponowne wykorzystanie definicji przepływów między zespołami.
  3. Eksport do JSON: Użytkownicy mogą eksportować szablony jako definicje przepływu w formacie JSON, co ułatwia ich przechowywanie i zarządzanie nimi.
  4. Bezpieczne przechowywanie: JSON definicje mogą być łatwiej przechowywane i zarządzane w bezpieczny sposób, zgodnie z najlepszymi praktykami.

Strategia planowania oparta na zdarzeniach

W wersji Apache NiFi 2.0.0 usunięto strategię harmonogramowania opartą na zdarzeniach (Event Driven Scheduling Strategy). Strategia ta była eksperymentalna i przez dłuższy czas nie wykazywała żadnych znaczących korzyści wydajnościowych, dlatego zespół deweloperów zdecydował się na jej wycofanie.

Usunięte komponenty w Apache NiFi 2.0.0

W Apache NiFi 2.0.0 usunięto wiele komponentów, funkcji oraz procesorów, które zostały zdezaktualizowane i mają dostępne lepsze alternatywy. Chociaż starałem się opisać najważniejsze zmiany, pełną listę wycofanych komponentów znajdziesz tutaj: Deprecation List.

Aby ułatwić migrację, społeczność NiFi opracowała aktualizowany przewodnik, który pomoże w przejściu z wersji 1 do 2. Można go znaleźć pod tym adresem: Migration Guide.

Dla użytkowników korzystających z najnowszej wersji Apache NiFi 2.0.0, wprowadzono nowy plik dziennika: nifi-deprecation.log. Może on pomóc w planowaniu przyszłych migracji oraz monitorowaniu używanych funkcji przeznaczonych do usunięcia. Szczegóły dotyczące jego użycia dostępne są w dokumentacji: Deprecation Logging.

2 comments
  1. Cześć, czy jest możliwość wysłania wyjścia NiFi na kanał telegram? np. za pomocą Python lub może jest natywna opcja?

    1. Cześć, NiFi nie posiada natywnego procesora Telegram, więc konieczne jest użycie procesorów InvokeHTTP lub ExecuteScript.

    2. InvokeHTTP: Skonfiguruj procesor do wysyłania żądań POST do API Telegrama (https://api.telegram.org/bot/sendMessage) z odpowiednim JSON-em.
    3. ExecuteScript: Użyj skryptu Python z biblioteką python-telegram-bot, aby wysyłać wiadomości za pomocą API Telegrama.
Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *