Udostępnij za pośrednictwem


Strumienie platformy Kafka dla usługi Azure Event Hubs

Ten artykuł zawiera szczegółowe informacje na temat sposobu, w jaki biblioteka klienta usługi Kafka Streams jest udostępniana za pomocą usługi Azure Event Hubs.

Uwaga

Funkcje strumieni platformy Kafka są dostępne tylko w publicznej wersji zapoznawczej dla usług Event Hubs Premium i Dedykowanych.

Omówienie

Apache Kafka Streams to tylko biblioteka klienta języka Java, która udostępnia platformę do przetwarzania danych przesyłanych strumieniowo i tworzenia aplikacji w czasie rzeczywistym względem danych przechowywanych w tematach platformy Kafka. Wszystkie operacje przetwarzania są ograniczone do klienta, natomiast tematy platformy Kafka działają jako magazyn danych dla danych pośrednich, zanim dane wyjściowe będą zapisywane w temacie docelowym.

Usługa Event Hubs udostępnia punkt końcowy platformy Kafka do użycia z istniejącymi aplikacjami klienckimi platformy Kafka jako alternatywę dla uruchamiania własnego klastra platformy Kafka. Usługa Event Hubs współpracuje z wieloma istniejącymi aplikacjami platformy Kafka. Aby uzyskać więcej informacji, zobacz Event Hubs for Apache Kafka (Usługa Event Hubs dla platformy Apache Kafka).

Używanie strumieni platformy Kafka z usługą Azure Event Hubs

Usługa Azure Event Hubs natywnie obsługuje zarówno protokół AMQP, jak i kafka. Jednak aby zapewnić zgodne zachowanie strumieni platformy Kafka, niektóre z domyślnych parametrów konfiguracji muszą zostać zaktualizowane dla klientów platformy Kafka.

Właściwości Domyślne zachowanie usługi Event Hubs Zmodyfikowane zachowanie strumieni platformy Kafka Wyjaśnienie
messageTimestampType ustaw wartość na AppendTime należy ustawić wartość na CreateTime Strumienie platformy Kafka korzystają z sygnatury czasowej tworzenia, a nie dołączania znacznika czasu
message.timestamp.difference.max.ms maksymalna dozwolona wartość to 90 dni Właściwość służy tylko do zarządzania znacznikami czasu przeszłości. Czas przyszły jest ustawiony na 1 godzinę i nie można go zmienić. Jest to zgodne ze specyfikacją protokołu Platformy Kafka
min.compaction.lag.ms maksymalna dozwolona wartość to dwa dni
Tematy dotyczące nieskończonego przechowywania obcinanie na podstawie rozmiaru 250 GB dla każdej partycji tematu
Usuwanie interfejsu API rekordów dla tematów dotyczących nieskończonego przechowywania Nie zaimplementowano. Aby obejść ten problem, można go zaktualizować i można ustawić ograniczony czas przechowywania. Zostanie to zrobione w ogólnie dostępnej

Inne uwagi

Oto niektóre z innych zagadnień, które należy wziąć pod uwagę.

  • Aplikacje klienckie platformy Kafka muszą mieć przyznane uprawnienia do zarządzania, odczytu i zapisu dla całej przestrzeni nazw, aby móc tworzyć tymczasowe tematy na potrzeby przetwarzania strumienia.
  • Tematy tymczasowe i partycje są liczone do limitu przydziału dla danej przestrzeni nazw. Należy je zachować podczas aprowizacji przestrzeni nazw lub klastra.
  • Nieskończony czas przechowywania magazynu "Przesunięcie" jest ograniczony przez maksymalny czas przechowywania komunikatów jednostki SKU. Sprawdź limity przydziału usługi Event Hubs dla tych wartości specyficznych dla warstwy.

Obejmują one aktualizowanie konfiguracji tematu w messageTimestampType celu użycia CreateTime (czyli czasu tworzenia zdarzenia) zamiast AppendTime (czyli czasu dołączania dziennika).

Aby zastąpić domyślne zachowanie (wymagane), poniższe ustawienie należy ustawić w usłudze Azure Resource Manager (ARM).

Uwaga

Wyświetlane są tylko określone części szablonu usługi ARM, aby wyróżnić konfigurację, która musi zostać zaktualizowana.

{
  "parameters": {
    "namespaceName": "contoso-test-namespace",
    "resourceGroupName": "contoso-resource-group",
    "eventHubName": "contoso-event-hub-kafka-streams-test",
    ...
    "parameters": {
      "properties": {
        ...
        "messageTimestampType": "CreateTime",
        "retentionDescription": {
          "cleanupPolicy": "Delete",
          "retentionTimeInHours": -1,
          "tombstoneRetentionTimeInHours": 1
        }
      }
    }
  }
}

Pojęcia dotyczące strumieni platformy Kafka

Strumienie platformy Kafka udostępnia prostą warstwę abstrakcji w interfejsach API producentów i konsumentów platformy Kafka, które ułatwiają deweloperom szybsze rozpoczęcie pracy ze scenariuszami przesyłania strumieniowego w czasie rzeczywistym. Biblioteka o lekkiej wadze zależy od brokera zgodnego z platformą Apache Kafka (na przykład usługi Azure Event Hubs) dla warstwy wewnętrznej obsługi komunikatów i zarządza magazynem stanu lokalnym odpornym na błędy. Dzięki transakcyjnym interfejsowi API biblioteka strumieni platformy Kafka obsługuje zaawansowane funkcje przetwarzania, takie jak dokładnie jednokrotne przetwarzanie i jeden rekord w czasie przetwarzania.

Rekordy wychodzące z zamówienia korzystają z operacji okien opartych na czasie zdarzenia.

Uwaga

Zalecamy zapoznanie się z dokumentacją usługi Kafka Streams i podstawowymi pojęciami dotyczącymi usługi Kafka Streams.

Strumienie

Strumień to abstrakcyjna reprezentacja tematu platformy Kafka. Składa się z niezwiązanego, ciągłego aktualizowania zestawu danych niezmiennych rekordów danych, gdzie każdy rekord danych jest parą klucz-wartość.

Topologia przetwarzania strumienia

Aplikacja strumieniowa platformy Kafka definiuje logikę obliczeniową za pośrednictwem języka DAG (skierowanego grafu acyklicznego) reprezentowanego przez topologię procesora. Topologia procesora składa się z procesorów strumieni (węzłów w topologii), które reprezentują krok przetwarzania połączony ze strumieniami (krawędzie w topologii).

Procesory strumienia mogą być połączone łańcuchem do nadrzędnych procesorów lub procesorów podrzędnych, z wyjątkiem niektórych przypadków specjalnych:

  • Procesory źródłowe — te procesory nie mają żadnych procesorów nadrzędnych i odczytują bezpośrednio z jednego lub większej liczby strumieni. Następnie można je połączyć w łańcuch do procesorów podrzędnych.
  • Procesory ujścia — te procesory nie mają żadnych procesorów podrzędnych i muszą zapisywać bezpośrednio w strumieniu.

Topologię przetwarzania strumieniowego można zdefiniować za pomocą języka DSL strumieni platformy Kafka lub interfejsu API procesora niższego poziomu.

Podwójność strumieni i tabeli

Strumienie i tabele to 2 różne, ale przydatne abstrakcje udostępniane przez rozszerzenie DSL strumieni platformy Kafka, modelując zarówno szeregi czasowe, jak i formaty danych relacyjnych, które muszą współistnieć w przypadku użycia przetwarzania strumieniowego.

Platforma Kafka rozszerza tę funkcję i wprowadza podwójność między strumieniami i tabelami, gdzie

  • Strumień można traktować jako dziennik zmian tabeli i
  • Tabelę można traktować jako migawkę najnowszej wartości każdego klucza w strumieniu.

Ta podwójność umożliwia używanie tabel i strumieni zamiennie zgodnie z wymaganiami przypadku użycia.

Na przykład

  • Łączenie statycznych danych klienta (modelowanych jako tabela) z transakcjami dynamicznymi (modelowane jako strumień) i
  • Dołączanie do zmieniających się pozycji portfela w portfelu dziennym (modelowane jako strumień) przy użyciu najnowszego źródła danych rynku (modelowanego jako strumienia).

Czas

Strumienie platformy Kafka umożliwiają pozyskiwanie poza kolejnością rekordów danych i korzystanie z funkcji prolongaty, które nadal są uwzględniane w przetwarzaniu. Aby upewnić się, że to zachowanie jest deterministyczne, istnieją dodatkowe pojęcia czasu w strumieniach platformy Kafka. Są to:

  • Czas utworzenia (znany również jako "Czas zdarzenia") — jest to czas wystąpienia zdarzenia i utworzenia rekordu danych.
  • Czas przetwarzania — jest to czas przetwarzania rekordu danych przez aplikację przetwarzania strumieniowego (lub gdy jest on używany).
  • Czas dołączania (znany również jako "Czas utworzenia") — jest to czas przechowywania i zatwierdzania danych w magazynie brokera platformy Kafka. Różni się to od czasu utworzenia ze względu na różnicę czasu między utworzeniem zdarzenia a rzeczywistym pozyskiwaniem przez brokera.

Operacje stanowe

Zarządzanie stanem umożliwia zaawansowane aplikacje do przetwarzania strumieniowego, takie jak łączenie i agregowanie danych z różnych strumieni. Jest to osiągane w przypadku magazynów stanów udostępnianych przez usługi Kafka Streams i uzyskiwanych do ich dostępu przy użyciu operatorów stanowych w języku DSL strumieni platformy Kafka.

Przekształcenia stanowe w języku DSL obejmują:

Okno i łaska

Operacje okien w języku DSL strumieni platformy Kafka umożliwiają deweloperom kontrolowanie sposobu grupowania rekordów dla danego klucza dla operacji stanowych, takich jak agregacje i sprzężenia.

Operacje okien umożliwiają również określenie okresu prolongaty, aby zapewnić pewną elastyczność rekordów poza kolejnością dla danego okna. Rekord przeznaczony dla danego okna i pojawia się po danym oknie, ale w okresie prolongaty jest akceptowany. Rekordy przychodzące po zakończeniu okresu prolongaty są odrzucane.

Aplikacje muszą korzystać z kontrolek okien i okresów prolongaty, aby poprawić odporność na uszkodzenia rekordów poza kolejnością. Odpowiednie wartości różnią się w zależności od obciążenia i muszą być identyfikowane empirycznie.

Gwarancje przetwarzania

Użytkownicy biznesowi i techniczni starają się wyodrębnić kluczowe informacje biznesowe z danych wyjściowych obciążeń przetwarzania strumieniowego, co przekłada się na wysokie wymagania dotyczące gwarancji transakcyjnych. Strumienie platformy Kafka współpracują z transakcjami platformy Kafka w celu zapewnienia gwarancji przetwarzania transakcyjnego dzięki integracji z podstawowym systemem magazynu brokerów platformy Kafka (takimi jak usługa Azure Event Hubs), aby zapewnić niepodzielne zapisywanie zatwierdzeń przesunięcia i aktualizacji magazynu stanów.

Aby zapewnić gwarancje przetwarzania transakcyjnego, processing.guarantee ustawienie w konfiguracjach strumieni platformy Kafka musi zostać zaktualizowane z wartości domyślnej at_least_once na exactly_once_v2 (w przypadku wersji klienta w systemie Apache Kafka 2.5) lub exactly_once (w przypadku wersji klienta przed platformą Apache Kafka 2.5.x).

Następne kroki

W tym artykule przedstawiono wprowadzenie do usługi Event Hubs dla platformy Kafka. Aby dowiedzieć się więcej, zobacz Przewodnik dla deweloperów platformy Apache Kafka dotyczący usługi Azure Event Hubs.

Aby zapoznać się z samouczkiem z instrukcjami krok po kroku dotyczącymi tworzenia centrum zdarzeń i uzyskiwania do niego dostępu przy użyciu sygnatury dostępu współdzielonego lub protokołu OAuth, zobacz Szybki start: przesyłanie strumieniowe danych za pomocą usługi Event Hubs przy użyciu protokołu Kafka.

Zapoznaj się również z przykładami OAuth w witrynie GitHub.