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.
Mer information om hur du migrerar dina Kafka-program till Azure Event Hubs finns i migreringsguiden.
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 |
Apache Kafka-funktioner som stöds på Azure Event Hubs
Kafka Streams
Kommentar
Kafka Streams finns för närvarande i offentlig förhandsversion i Premium och dedikerad nivå.
Kafka Streams ä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.
Azure Event Hubs stöder Kafka Streams-klientbiblioteket med information och begrepp som är tillgängliga här.
Den vanligaste anledningen till att Azure Event Hubs-kunder ber om Kafka Streams-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 Streams 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:
- Azure Stream Analytics
- Azure Synapse Analytics (via Event Hubs Capture)
- Azure Databricks
- Apache Samza
- Apache Storm
- Apache Spark
- Apache Flink
- Apache Flink på HDInsight på AKS
- Akka Streams
Kafka-transaktioner
Kommentar
Kafka-transaktioner finns för närvarande i offentlig förhandsversion på premium- och dedikerad nivå.
Azure Event Hubs stöder Kafka-transaktioner. Mer information om support och begrepp finns här
Komprimering
Kommentar
Kafka-komprimering för Event Hubs stöds endast på premium- och dedikerade nivåer för närvarande.
Komprimeringsfunktionen på klientsidan i Apache Kafka-klienter sparar beräkningsresurser och bandbredd genom att komprimera en batch med flera meddelanden till ett enda meddelande på producentsidan och dekomprimera 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. Azure Event Hubs stöder gzip
för närvarande komprimering.
Compression.type = none | gzip
Även om funktionen endast stöds för Apache Kafka-trafikproducent och konsumenttrafik, kan AMQP-konsumenter använda komprimerad Kafka-trafik som dekomprimerade meddelanden.
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 .
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.