Vad är Azure Event Hubs för Apache Kafka

Den här artikeln beskriver hur du kan använda Azure Event Hubs för att strömma data från Apache Kafka-program utan att konfigurera ett Kafka-kluster på egen hand.

Kommentar

Den här funktionen stöds endast på standard-, premium- och dedikerade nivåer.

Översikt

Azure Event Hubs tillhandahåller en Apache Kafka-slutpunkt på en händelsehubb som gör det möjligt för användare att ansluta till händelsehubben med hjälp av Kafka-protokollet. Du kan ofta använda en händelsehubbs Kafka-slutpunkt från dina program utan några kodändringar. Du ändrar bara konfigurationen, det vill säga uppdaterar anslutningssträng i konfigurationer så att den pekar på Den Kafka-slutpunkt som exponeras av händelsehubben i stället för att peka på ett Kafka-kluster. Sedan kan du starta strömmande händelser från dina program som använder Kafka-protokollet till händelsehubbar, vilket motsvarar Kafka-ämnen.

Kommentar

Event Hubs för Kafka Ecosystems stöder Apache Kafka version 1.0 och senare.

Konceptuell mappning för Apache Kafka och Azure Event Hubs

Konceptuellt är Kafka och Event Hubs mycket lika. De är båda partitionerade loggar som skapats för strömmande data, där klienten styr vilken del av den kvarhållna loggen som den vill läsa. Följande tabell mappar begrepp mellan Kafka och Event Hubs.

Kafka-koncept Event Hubs-koncept
Kluster Namnområde
Område En händelsehubb
Partition Partition
Konsumentgrupp Konsumentgrupp
Förskjutning Förskjutning

Viktiga skillnader mellan Apache Kafka och Azure Event Hubs

Apache Kafka är programvara som du vanligtvis behöver installera och använda, men Event Hubs är en fullständigt hanterad, molnbaserad tjänst. Det finns inga servrar, diskar eller nätverk att hantera och övervaka och inga koordinatorer att överväga eller konfigurera, någonsin. Du skapar ett namnområde, som är en slutpunkt med ett fullständigt domännamn, och sedan skapar du Event Hubs (ämnen) inom det namnområdet.

Mer information om Event Hubs och namnområden finns i Event Hubs-funktioner. Som molntjänst använder Event Hubs en enda stabil virtuell IP-adress som slutpunkt, så klienterna behöver inte känna till koordinatorerna eller datorerna i ett kluster. Även om Event Hubs implementerar samma protokoll innebär den här skillnaden att all Kafka-trafik för alla partitioner dirigeras förutsägbart via den här slutpunkten i stället för att kräva brandväggsåtkomst för alla koordinatorer i ett kluster.

Skala i Event Hubs styrs av hur många dataflödesenheter (TUS) eller bearbetningsenheter du köper. Om du aktiverar funktionen Autoinflate för ett standardnivånamnområde skalar Event Hubs automatiskt upp TU:er när du når dataflödesgränsen. Den här funktionen fungerar också med Apache Kafka-protokollstöd. För ett premiumnivånamnområde kan du öka antalet bearbetningsenheter som tilldelats till namnområdet.

Är Apache Kafka rätt lösning för din arbetsbelastning?

När du kommer från att skapa program med Apache Kafka är det också användbart att förstå att Azure Event Hubs ingår i en uppsättning tjänster, som även omfattar Azure Service Bus och Azure Event Grid.

Även om vissa leverantörer av kommersiella distributioner av Apache Kafka kan tyda på att Apache Kafka är en one-stop-shop för alla dina meddelandeplattformsbehov, är verkligheten att Apache Kafka inte implementerar, till exempel kömönstret för konkurrerande konsumenter , inte har stöd för publiceringsprenumeration på en nivå som ger prenumeranter åtkomst till inkommande meddelanden baserat på andra serveruppskattade regler än vanliga förskjutningar, och den har inga möjligheter att spåra livscykeln för ett jobb som initieras av ett meddelande eller åsidosätta felaktiga meddelanden i en kö med obeställbara meddelanden, som alla är grundläggande för många företagsmeddelandescenarier.

Information om skillnaderna mellan mönster och vilket mönster som bäst omfattas av vilken tjänst finns i Asynkrona meddelandealternativ i Azure-vägledningen . Som Apache Kafka-användare kan du upptäcka att kommunikationsvägar som du hittills har insett med Kafka kan förverkligas med mycket mindre grundläggande komplexitet och ännu mer kraftfulla funktioner med antingen Event Grid eller Service Bus.

Om du behöver specifika funktioner i Apache Kafka som inte är tillgängliga via Event Hubs för Apache Kafka-gränssnittet eller om implementeringsmönstret överskrider Event Hubs-kvoterna kan du även köra ett internt Apache Kafka-kluster i Azure HDInsight.

Säkerhet och autentisering

Varje gång du publicerar eller använder händelser från en händelsehubb för Kafka försöker klienten komma åt Event Hubs-resurserna. Du vill se till att resurserna används med hjälp av en auktoriserad entitet. När du använder Apache Kafka-protokollet med dina klienter kan du ange konfigurationen för autentisering och kryptering med hjälp av SASL-mekanismerna. När du använder Event Hubs för Kafka kräver TLS-kryptering (eftersom alla data som överförs med Event Hubs är TLS-krypterade) kan du ange alternativet SASL_SSL i konfigurationsfilen.

Azure Event Hubs innehåller flera alternativ för att auktorisera åtkomst till dina säkra resurser.

  • OAuth 2.0
  • Signatur för delad åtkomst (SAS)

OAuth 2.0

Event Hubs integreras med Microsoft Entra ID, som tillhandahåller en OAuth 2.0-kompatibel centraliserad auktoriseringsserver. Med Microsoft Entra-ID kan du använda rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att ge detaljerade behörigheter till dina klientidentiteter. Du kan använda den här funktionen med dina Kafka-klienter genom att ange SASL_SSL för protokollet och OAUTHBEARER för mekanismen. Mer information om Azure-roller och nivåer för omfångsåtkomst finns i Auktorisera åtkomst med Microsoft Entra-ID.

bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;
sasl.login.callback.handler.class=CustomAuthenticateCallbackHandler

Kommentar

Ovanstående konfigurationsegenskaper gäller för programmeringsspråket Java. Exempel som visar hur du använder OAuth med Event Hubs för Kafka med olika programmeringsspråk finns i exempel på GitHub.

Signatur för delad åtkomst (SAS)

Event Hubs tillhandahåller även SIGNATUREr för delad åtkomst (SAS) för delegerad åtkomst till Event Hubs för Kafka-resurser. Att auktorisera åtkomst med hjälp av en OAuth 2.0-tokenbaserad mekanism ger överlägsen säkerhet och användarvänlighet över SAS. De inbyggda rollerna kan också eliminera behovet av ACL-baserad auktorisering, som måste underhållas och hanteras av användaren. Du kan använda den här funktionen med dina Kafka-klienter genom att ange SASL_SSL för protokollet och PLAIN för mekanismen.

bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}";

Viktigt!

Ersätt {YOUR.EVENTHUBS.CONNECTION.STRING} med anslutningssträng för Event Hubs-namnområdet. Anvisningar om hur du hämtar anslutningssträng finns i Hämta en Event Hubs-anslutningssträng. Här är ett exempel på konfiguration: sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="Endpoint=sb://mynamespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXXXXXXXXXXXXXX";

Kommentar

När du använder SAS-autentisering med Kafka-klienter kopplas inte etablerade anslutningar från när SAS-nyckeln återskapas.

Kommentar

Genererade signaturtoken för delad åtkomst stöds inte när du använder Event Hubs för Apache Kafka-slutpunkten.

Exempel

En självstudiekurs med stegvisa instruktioner för att skapa en händelsehubb och komma åt den med hjälp av SAS eller OAuth finns i Snabbstart: Dataströmning med Event Hubs med hjälp av Kafka-protokollet.

Andra Funktioner i Azure Event Hubs

Event Hubs för Apache Kafka-funktionen är ett av tre protokoll som är tillgängliga samtidigt på Azure Event Hubs och kompletterar HTTP och AMQP. Du kan skriva med något av dessa protokoll och läsa med andra, så att dina nuvarande Apache Kafka-producenter kan fortsätta publicera via Apache Kafka, men läsaren kan dra nytta av den interna integreringen med Event Hubs AMQP-gränssnitt, till exempel Azure Stream Analytics eller Azure Functions. Däremot kan du enkelt integrera Azure Event Hubs i AMQP-routningsnätverk som målslutpunkt och ändå läsa data via Apache Kafka-integreringar.

Dessutom fungerar Event Hubs-funktioner som Capture, som möjliggör extremt kostnadseffektiv långsiktig arkivering via Azure Blob Storage och Azure Data Lake Storage, och Geo Disaster-Recovery med funktionen Event Hubs for Kafka.

Idempotens

Azure Event Hubs för Apache Kafka stöder både idempotent-producenter och idempotentanvändare.

En av grundsatserna i Azure Event Hubs är begreppet leverans minst en gång . Den här metoden säkerställer att händelser alltid levereras. Det innebär också att händelser kan tas emot mer än en gång, till och med upprepade gånger, av konsumenter, till exempel en funktion. Därför är det viktigt att konsumenten stöder det idempotenta konsumentmönstret .

Funktionsskillnader med Apache Kafka

Målet med Event Hubs för Apache Kafka är att ge åtkomst till Azure Event Hubs-funktioner till program som är låsta i Apache Kafka-API:et och annars måste backas upp av ett Apache Kafka-kluster.

Som beskrivs ovan ger Azure Messaging-flottan omfattande och robust täckning för en mängd olika meddelandescenarier, och även om följande funktioner för närvarande inte stöds via Event Hubs stöd för Apache Kafka-API:et, påpekar vi var och hur den önskade funktionen är tillgänglig.

Transaktioner

Azure Service Bus har robust transaktionsstöd som gör det möjligt att ta emot och lösa meddelanden och sessioner när utgående meddelanden skickas till följd av meddelandebearbetning till flera målentiteter under konsekvensskyddet för en transaktion. Funktionsuppsättningen tillåter inte bara exakt en gång bearbetning av varje meddelande i en sekvens, utan undviker också risken för att en annan konsument oavsiktligt bearbetar samma meddelanden som det skulle vara fallet med Apache Kafka. Service Bus är den rekommenderade tjänsten för transaktionsmeddelandearbetsbelastningar.

Komprimering

Komprimeringsfunktionen på klientsidan i Apache Kafka komprimerar en batch med flera meddelanden till ett enda meddelande på producentsidan och dekomprimerar batchen på konsumentsidan. Apache Kafka-mäklaren behandlar batchen som ett särskilt meddelande.

Utvecklare av Kafka-producentprogram kan aktivera meddelandekomprimering genom att ange egenskapen compression.type. Den enda komprimeringsalgoritm som stöds i den offentliga förhandsversionen är gzip.

Compression.type = none | gzip

Funktionen stöds för närvarande endast för Apache Kafka-trafikproducent och konsumenttrafik. AMQP-konsumenter kan använda komprimerad Kafka-trafik som dekomprimerade meddelanden. Nyttolasten för alla Event Hubs-händelser är en byteström och innehållet kan komprimeras med en algoritm som du väljer, men i offentlig förhandsversion är det enda alternativet gzip. Fördelarna med att använda Kafka-komprimering är mindre meddelandestorlek, ökad nyttolaststorlek som du kan överföra och lägre resursförbrukning för meddelandekoordinator.

Kafka Flöden

Kafka Flöden är ett klientbibliotek för dataströmanalys som är en del av Apache Kafka-projektet med öppen källkod, men som är separat från Apache Kafka-händelsekoordinatorn.

Den vanligaste anledningen till att Azure Event Hubs-kunder ber om Kafka-Flöden support är att de är intresserade av Confluents "ksqlDB"-produkt. "ksqlDB" är ett proprietärt projekt för delad källa som är licensierat så att ingen leverantör som "erbjuder programvara som en tjänst, plattform som en tjänst, infrastruktur som en tjänst eller andra liknande onlinetjänster som konkurrerar med Confluent-produkter eller -tjänster" tillåts använda eller erbjuda "ksqlDB"-stöd. Om du använder ksqlDB måste du praktiskt taget antingen använda Kafka själv eller använda Confluents molnerbjudanden. Licensvillkoren kan också påverka Azure-kunder som erbjuder tjänster i ett syfte som undantas av licensen.

Fristående och utan ksqlDB har Kafka Flöden färre funktioner än många alternativa ramverk och tjänster, varav de flesta har inbyggda strömnings-SQL-gränssnitt och alla integreras med Azure Event Hubs idag:

De listade tjänsterna och ramverken kan i allmänhet hämta händelseströmmar och referensdata direkt från en mängd olika källor via kort. Kafka Flöden kan bara hämta data från Apache Kafka och dina analysprojekt är därför låsta i Apache Kafka. Om du vill använda data från andra källor måste du först importera data till Apache Kafka med Kafka Anslut-ramverket.

Om du måste använda Kafka Flöden-ramverket i Azure ger Apache Kafka på HDInsight det alternativet. Apache Kafka på HDInsight ger fullständig kontroll över alla konfigurationsaspekter av Apache Kafka, samtidigt som det är helt integrerat med olika aspekter av Azure-plattformen, från fel-/uppdateringsdomänplacering till nätverksisolering till övervakningsintegrering.

Nästa steg

Den här artikeln gav en introduktion till Event Hubs för Kafka. Mer information finns i Apache Kafka-utvecklarguiden för Azure Event Hubs.

En självstudiekurs med stegvisa instruktioner för att skapa en händelsehubb och komma åt den med hjälp av SAS eller OAuth finns i Snabbstart: Dataströmning med Event Hubs med hjälp av Kafka-protokollet.

Se även OAuth-exemplen på GitHub.