Czym jest Apache Kafka? Skalowalne przesyłanie strumieniowe zdarzeń

Czym jest Apache Kafka? Skalowalne przesyłanie strumieniowe zdarzeń

8 marca 2022 0 przez It-hits

Zapisywanie wszystkich danych w hurtowni danych i analizowanie ich za pomocą nocnego procesu wsadowego nie wystarcza już do monitorowania i zarządzania przedsiębiorstwem lub procesem w odpowiednim czasie. Zamiast tego należy wykonywać proste analizy strumieni danych w czasie rzeczywistym, a także zapisywać dane w celu późniejszej dogłębnej analizy.

Apache Kafka, pierwotnie opracowana w LinkedIn, jest jedną z najbardziej zaawansowanych platform do strumieniowego przesyłania zdarzeń. Dodatkami do Kafki są Apache Flink, Apache Samza, Apache Spark, Apache Storm, Databricks i Ververica. Alternatywą dla Kafki są Amazon Kinesis, Apache Pulsar, Azure Stream Analytics, Confluent i Google Cloud Dataflow.

Jedną z wad Kafki jest to, że tworzenie dużych klastrów Kafki może być trudne. Komercyjne implementacje Kafki w chmurze, takie jak Confluent Cloud i Amazon Managed Streaming for Apache Kafka, rozwiązują ten i inne problemy, ale za odpowiednią cenę.

Definicja Apache Kafka

Apache Kafka jest platformą open source, Java/Scala, rozproszonego strumienia zdarzeń dla wysokowydajnych potoków danych, analizy strumieniowej, integracji danych i aplikacji o krytycznym znaczeniu. Zdarzenia Kafki są organizowane i trwale przechowywane w tematach.

Kafka ma pięć podstawowych interfejsów API:

  • Admin API do zarządzania i sprawdzania tematów, brokerów i innych obiektów Kafki.
  • API Producenta do publikowania (zapisywania) strumienia zdarzeń do jednego lub więcej tematów Kafki.
  • Interfejs API Konsumenta do subskrybowania (odczytywania) jednego lub więcej tematów i przetwarzania strumienia zdarzeń do nich kierowanych.
  • Kafka Streams API do implementacji aplikacji przetwarzających strumienie i mikroserwisów. Udostępnia on funkcje wyższego poziomu do przetwarzania strumieni zdarzeń, w tym transformacje, operacje stanowe, takie jak agregacje i złączenia, windowing, przetwarzanie na podstawie czasu zdarzenia i inne. Dane wejściowe są odczytywane z jednego lub więcej tematów w celu wygenerowania danych wyjściowych do jednego lub więcej tematów, efektywnie przekształcając strumienie wejściowe w strumienie wyjściowe.
  • Interfejs API Kafka Connect służy do tworzenia i uruchamiania konektorów importu/eksportu danych wielokrotnego użytku, które pobierają (odczytują) lub produkują (zapisują) strumienie zdarzeń z i do zewnętrznych systemów i aplikacji, aby mogły one integrować się z Kafką. Na przykład, konektor do relacyjnej bazy danych, takiej jak PostgreSQL, może przechwytywać każdą zmianę w zestawie tabel. W praktyce jednak zazwyczaj nie ma potrzeby implementowania własnych konektorów, ponieważ społeczność Kafki udostępnia już setki gotowych do użycia konektorów.

Aby zaimplementować przetwarzanie strumieni bardziej skomplikowane niż to, które można łatwo obsłużyć za pomocą API strumieni, można zintegrować Kafkę z Apache Samza (omówioną poniżej) lub Apache Flink.

Jeśli chodzi o komercyjnie wspieraną wersję Apache Kafka, warto rozważyć Confluent.

Jak działa Kafka?

Kafka jest systemem rozproszonym składającym się z serwerów i klientów, które komunikują się za pomocą wydajnego protokołu sieciowego TCP. Można ją wdrożyć na sprzęcie bare-metal, maszynach wirtualnych i kontenerach zarówno w siedzibie firmy, jak i w środowiskach chmurowych.

Serwery: Kafka jest uruchamiana jako klaster jednego lub więcej serwerów, który może obejmować wiele centrów danych lub regionów chmury. Niektóre z tych serwerów tworzą warstwę przechowywania danych, zwaną brokerami. Inne serwery uruchamiają Kafka Connect, aby w sposób ciągły importować i eksportować dane jako strumienie zdarzeń w celu zintegrowania Kafki z istniejącymi systemami, takimi jak relacyjne bazy danych, a także z innymi klastrami Kafki. Aby umożliwić wdrożenie krytycznych przypadków użycia, klaster Kafka jest bardzo rozbudowany.y skalowalne i odporne na błędy. W przypadku awarii jednego z serwerów pozostałe serwery przejmują jego pracę, zapewniając ciągłość działania bez utraty danych.

Klienci: Klienci Kafki umożliwiają pisanie rozproszonych aplikacji i mikroserwisów, które odczytują, zapisują i przetwarzają strumienie zdarzeń równolegle, w skali i w sposób odporny na błędy, nawet w przypadku problemów z siecią lub awarii maszyn. Kafka jest dostarczana z kilkoma klientami, które są uzupełniane przez dziesiątki klientów dostarczanych przez społeczność Kafki. Klienty Kafki są dostępne dla języków Java i Scala, w tym dla wysokopoziomowej biblioteki Kafka Streams, a także dla Go, Pythona, C/C++ i wielu innych języków programowania oraz interfejsów REST API.

Czym jest Apache Samza?

Apache Samza to opensource’owy framework do rozproszonego przetwarzania strumieni w języku Scala/Java, który został pierwotnie opracowany w LinkedIn we współpracy z (Apache) Kafką. Samza pozwala na tworzenie aplikacji stanowych, które przetwarzają dane w czasie rzeczywistym z wielu źródeł, w tym z Apache Kafka. Do cech Samzy należą:

  • Ujednolicone API: Proste API do opisywania logiki aplikacji w sposób niezależny od źródła danych. To samo API może przetwarzać zarówno dane wsadowe, jak i strumieniowe.
  • Wtykowość na każdym poziomie: Przetwarzanie i przekształcanie danych z dowolnego źródła. Samza oferuje wbudowane integracje z Apache Kafka, AWS Kinesis, Azure Event Hubs (natywna dla Azure Kafka jako usługa), Elasticsearch i Apache Hadoop. Ponadto można ją dość łatwo zintegrować z własnymi źródłami.
  • Samza jako biblioteka wbudowana: Integracja z istniejącymi aplikacjami i wyeliminowanie konieczności tworzenia i obsługi oddzielnego klastra do przetwarzania strumieniowego. Samza może być używana jako lekka biblioteka kliencka osadzona w aplikacjach Java/Scala.
  • Napisz raz, uruchom gdziekolwiek: Elastyczne opcje wdrażania umożliwiające uruchamianie aplikacji w dowolnym miejscu – od chmur publicznych, przez środowiska kontenerowe, po sprzęt typu bare-metal.
  • Samza jako usługa zarządzana: Przetwarzanie strumieniowe jako usługa zarządzana poprzez integrację z popularnymi menedżerami klastrów, w tym Apache YARN.
  • Tolerancja błędów: Transparentnie migruje zadania wraz z ich stanem w przypadku awarii. Samza wspiera host-affinity i inkrementalne checkpointing, aby umożliwić szybkie odzyskiwanie danych po awariach.
  • Ogromna skala: Przetestowana na aplikacjach, które wykorzystują kilka terabajtów stanu i działają na tysiącach rdzeni. Samza zasila wiele dużych firm, w tym LinkedIn, Uber, TripAdvisor i Slack.

Kafka i Confluent

Platforma Confluent jest komercyjną adaptacją Apache Kafka przez pierwotnych twórców Kafki, oferowaną on-premises i w chmurze. Confluent Cloud został przebudowany od podstaw jako bezserwerowa, elastyczna, efektywna kosztowo i w pełni zarządzana usługa cloud-native i działa na Amazon Web Services, Microsoft Azure i Google Cloud Platform.

Kafka u głównych dostawców usług w chmurze

Amazon Managed Streaming for Apache Kafka (MSK) współistnieje z Confluent Cloud i Amazon Kinesis na AWS. Wszystkie trzy wykonują zasadniczo tę samą usługę. Na Microsoft Azure, Apache Kafka on HDInsight i Confluent Cloud współistnieją z Azure Event Hubs i Azure Stream Analytics. W Google Cloud z Confluent Cloud współistnieją Google Cloud Dataflow, Google Cloud Dataproc, Google Cloud Pub/Sub i Google Cloud BigQuery.

Przykłady zastosowania Kafki

Tencent (klient Confluent) wykorzystał Kafkę do zbudowania potoków danych dla międzyregionalnych

log ingestion, platformy uczenia maszynowego i asynchronicznej komunikacji między mikrousługami. Firma Tencent potrzebowała większej przepustowości i mniejszych opóźnień, niż mogłaby uzyskać z pojedynczego klastra Kafka, więc opakowała swoje klastry Kafka w warstwę proxy, aby stworzyć federacyjny projekt Kafka, który obsługuje ponad 10 bilionów wiadomości dziennie przy maksymalnej przepustowości klastra wynoszącej 240 Gb/s.

Microsoft Azure zbudował prototypowe, kompleksowe rozwiązanie do przetwarzania danych IoT z Confluent Cloud, brokerami i konektorami MQTT, magazynem analitycznym Azure Cosmos DB, Azure Synapse Analytics i Azure Spring Cloud. Wspomniany artykuł zawiera wszystkie kroki konfiguracji.

ACERTUS zbudował kompleksowy system zarządzania flotą pojazdów z Confluent Cloud, ksqlDB (baza danych SQL specjalizująca się w danych strumieniowych), AWS Lambda i hurtowni danych Snowflake. ACERTUS raportuje wygenerowanie ponad 10 milionów dolarów przychodu w pierwszym roku dzięki temu systemowi, który zastąpił w dużej mierze system ręczny.

Jak widzieliśmy, Kafka może rozwiązać rzeczywiste, wielkoskalowe problemy, które wymagają danych strumieniowych. Jednocześnie istnieje wiele sposobów projektowania rozwiązań opartych na Kafce oraz łączenia Kafki z analizą i pamięcią masową.

Copyright © 2022 IDG Communications, Inc.


Czytaj dalej: https://www.infoworld.com/article/3651358/what-is-apache-kafka-scalable-event-streaming.html#tk.rss_all