Använda Azure Event Hubs från Apache Kafka program

Event Hubs tillhandahåller en slutpunkt som är kompatibel med Apache Kafka®-producent- och konsument-API:er som kan användas av de flesta befintliga Apache Kafka-klientprogram som ett alternativ till att köra ditt eget Apache Kafka-kluster. Event Hubs stöder Apache Kafka producent- och konsument-API-klienter i version 1.0 och senare.

Vad tillhandahåller Event Hubs kafka?

Funktionen Event Hubs för Apache Kafka ger ett protokollhuvud ovanpå Azure Event Hubs som är kompatibelt med Apache Kafka-klienter som skapats för Apache Kafka serverversion 1.0 och senare och har stöd för både läsning från och skrivning till Event Hubs, vilket motsvarar Apache Kafka ämnen.

Du kan ofta använda Event Hubs Kafka-slutpunkten från dina program utan kodändringar jämfört med din befintliga Kafka-konfiguration och bara ändra konfigurationen: Uppdatera anslutningssträngen i konfigurationer så att den pekar på Kafka-slutpunkten som exponeras av din händelsehubb i stället för att peka på ditt Kafka-kluster. Sedan kan du starta direktuppspelningshändelser från dina program som använder Kafka-protokollet till Event Hubs.

Konceptuellt är Kafka och Event Hubs mycket lika: båda är 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.

Konceptuell mappning för Kafka och Event Hub

Kafka-koncept Event Hubs koncept
Kluster Namnområde
Avsnitt Händelsehubb
Partition Partition
Konsumentgrupp Konsumentgrupp
Offset Offset

Viktiga skillnader mellan Apache Kafka och Event Hubs

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

Mer information om Event Hubs och namnrymder 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 a brokers eller datorerna i ett kluster. Även Event Hubs implementerar samma protokoll innebär den här skillnaden att all Kafka-trafik för alla partitioner förutsägbart dirigeras genom den här slutpunkten i stället för att kräva brandväggsåtkomst för alla a brokers i ett kluster.

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

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

När du skapar program med Apache Kafka är det också bra att förstå att Azure Event Hubs ingår i en vagnpark med tjänster, som även omfattar Azure Service Bus och Azure Event Grid.

Vissa leverantörer av kommersiella distributioner av Apache Kafka kan föreslå att Apache Kafka är en enda butik för alla dina meddelandeplattformsbehov, men verkligheten är att Apache Kafka till exempel inte implementerar kömönstret konkurrerande konsument, har inte stöd för publicera/prenumerera på en nivå som ger prenumeranter åtkomst till inkommande meddelanden baserat på andra server utvärderade regler än oformaterade förskjutningar, och den har inga resurser för att spåra livscykeln för ett jobb som initieras av ett meddelande eller lägga till felaktiga meddelanden i en kö med felstavning, som alla är grundläggande för många meddelandescenarier för företag.

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 kanske du upptäcker att kommunikationsvägar som du hittills har insett med Kafka kan realiseras med mycket mindre grundläggande komplexitet och ännu mer kraftfulla funktioner med hjälp av 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 ditt implementeringsmönsteröverskrider Event Hubs-kvoter kan du även köra ett inbyggt Apache Kafka-kluster i Azure HDInsight.

Säkerhet och autentisering

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

Azure Event Hubs 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 Azure Active Directory (Azure AD), som tillhandahåller en centraliserad OAuth 2.0-kompatibel auktoriseringsserver. Med Azure AD kan du använda rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att bevilja mer information om dina klientidentiteter. Du kan använda den här funktionen med dina Kafka-klienter genom att 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 Azure AD.

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

Signatur för delad åtkomst (SAS)

Event Hubs tillhandahåller också signaturer för delad åtkomst (SAS) för delegerad åtkomst till Event Hubs för Kafka-resurser. Auktorisering av åtkomst med hjälp av OAuth 2.0-tokenbaserad mekanism ger överlägsen säkerhet och enkel användning ö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 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ängen för Event Hubs namnområdet. Anvisningar om hur du hämtar anslutningssträngen finns i Hämta en Event Hubs-anslutningssträng. Här är en exempelkonfiguration: sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="Endpoint=sb://mynamespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXXXXXXXXXXXXXX";

Anteckning

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

Exempel

En självstudiekurs med stegvisa instruktioner för hur du skapar en händelsehubb och får åtkomst till den med hjälp av SAS eller OAuth finns i Snabbstart: Dataströmning med Event Hubs med Hjälp av Kafka-protokollet.

Fler exempel som visar hur du använder OAuth med Event Hubs för Kafka finns i exempel på GitHub.

Andra Event Hubs funktioner

Funktionen Event Hubs för Apache Kafka är ett av tre protokoll som är tillgängliga samtidigt på Azure Event Hubs, som 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 inbyggda integreringen med Event Hubs AMQP-gränssnittet, till exempel Azure Stream Analytics eller Azure Functions. På samma sätt kan du enkelt integrera Azure Event Hubs AMQP-routningsnätverk som en 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-haveriberedskap, även med funktionen Event Hubs for Kafka.

Apache Kafka funktionsskillnader

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 skulle behöva backas upp av ett Apache Kafka kluster.

Som förklarasovan ger Azure Messaging-vagnpark 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:s stöd för Apache Kafka-API:et, pekar vi på 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 reglera meddelanden och sessioner när utgående meddelanden skickas från meddelandebearbetning till flera målentiteter under konsekvensskyddet för en transaktion. Funktionsuppsättningen tillåter inte bara bearbetning exakt en gång av varje meddelande i en sekvens, utan undviker också risken för att en annan konsument oavsiktligt ombearbetar samma meddelanden som det skulle vara fallet med Apache Kafka. Service Bus är den rekommenderade tjänsten för transaktionsmeddelandearbetsbelastningar.

Komprimering

Komprimeringsfunktionen på Apache Kafka komprimerar en batch med flera meddelanden till ett enda meddelande på producentsidan och dekomprimerar batchen på konsumentsidan. Den Apache Kafka hanterar batchen som ett särskilt meddelande.

Den här funktionen är i grunden ojämförlig med Azure Event Hubs:s modell med flera protokoll, vilket gör att meddelanden, även de som skickas i batchar, kan hämtas individuellt från koordinatorn och via alla protokoll.

Nyttolasten för en Händelsehubbhändelse är en byteström och innehållet kan komprimeras med en valfri algoritm. Kodningsformatet Apache Avro stöder komprimering inbyggt.

Loggkomprimering

Apache Kafka loggkomprimering är en funktion som gör det möjligt att avlägsna alla utom den sista posten för varje nyckel från en partition, vilket i praktiken omvandlar ett Apache Kafka-ämne till ett nyckel/värde-lager där det sista värdet åsidosätter det föregående. Den här funktionen implementeras för närvarande inte av Azure Event Hubs. Mönstret för nyckel/värde-lager, även med frekventa uppdateringar, stöds mycket bättre av databastjänster som Azure Cosmos DB. Mer information finns i Loggprojektion.

Kafka-Flöden

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

Den vanligaste orsaken Azure Event Hubs kunder ber om Kafka Flöden support är att de är intresserade av Confluents "ksqlDB"-produkt. "ksqlDB" är ett egenutvecklat projekt för delad källa som licensieras så att ingen leverantör "erbjuder programvara som en tjänst, plattform som en tjänst, infrastruktur som en tjänst eller annan liknande onlinetjänster som konkurrerar med Confluent-produkter eller -tjänster" har tillåtelse att använda eller erbjuda "ksqlDB"-stöd. I praktiken måste du, om du använder ksqlDB, antingen använda Kafka själv eller använda Confluents molnerbjudanden. Licensvillkoren kan också påverka Azure-kunder som erbjuder tjänster för ett ändamål 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 SQL-gränssnitt för strömning och alla integreras med Azure Event Hubs idag:

De angivna tjänsterna och ramverken kan vanligtvis 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 får Apache Kafka HDInsight det alternativet. Apache Kafka på HDInsight ger fullständig kontroll över alla konfigurationsaspekter av Apache Kafka, samtidigt som den är helt integrerad med olika aspekter av Azure-plattformen, från fel/uppdatering av domänplacering till nätverksisolering till övervakningsintegrering.

Nästa steg

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