Wat is Azure Event Hubs voor Apache Kafka?

In dit artikel wordt uitgelegd hoe u Azure Event Hubs kunt gebruiken om gegevens uit Apache Kafka-toepassingen te streamen zonder dat u zelf een Kafka-cluster hoeft in te stellen.

Notitie

Deze functie wordt alleen ondersteund in de standard-, premium - en toegewezen lagen.

Overzicht

Azure Event Hubs biedt een Apache Kafka-eindpunt op een Event Hub, waarmee gebruikers verbinding kunnen maken met de Event Hub met behulp van het Kafka-protocol. U kunt het Kafka-eindpunt van een Event Hub vaak gebruiken vanuit uw toepassingen zonder codewijzigingen. U wijzigt alleen de configuratie, dat wil gezegd, de verbindingsreeks bijwerken in configuraties om te verwijzen naar het Kafka-eindpunt dat door uw Event Hub wordt weergegeven in plaats van naar een Kafka-cluster te verwijzen. Vervolgens kunt u streaminggebeurtenissen starten vanuit uw toepassingen die gebruikmaken van het Kafka-protocol in Event Hubs, die gelijk zijn aan Kafka-onderwerpen.

Notitie

Event Hubs voor Kafka Ecosystemen ondersteunt Apache Kafka versie 1.0 en hoger.

Conceptuele toewijzing van Apache Kafka en Azure Event Hubs

Conceptueel zijn Kafka en Event Hubs vergelijkbaar. Ze zijn beide gepartitioneerde logboeken die zijn gebouwd voor streaminggegevens, waarbij de client bepaalt welk deel van het bewaarde logboek het wil lezen. In de volgende tabel worden concepten tussen Kafka en Event Hubs toegewezen.

Kafka-concept Event Hubs Concept
Cluster Naamruimte
Onderwerp Een Event Hub
Partitie Partitie
Consumentengroep Consumentengroep
Verschuiving Verschuiving

Belangrijkste verschillen tussen Apache Kafka en Azure Event Hubs

Hoewel Apache Kafka software is die u doorgaans moet installeren en gebruiken, is Event Hubs een volledig beheerde, cloudeigen service. Er zijn geen servers, schijven of netwerken om te beheren en bewaken en geen brokers om ooit rekening mee te houden of te configureren. U maakt een naamruimte, een eindpunt met een volledig gekwalificeerde domeinnaam en vervolgens maakt u Event Hubs (onderwerpen) in die naamruimte.

Zie De functies van Event Hubs voor meer informatie over Event Hubs en naamruimten. Als cloudservice gebruikt Event Hubs één stabiel virtueel IP-adres als eindpunt, zodat clients niet hoeven te weten over de brokers of machines in een cluster. Hoewel Event Hubs hetzelfde protocol implementeert, betekent dit verschil dat al het Kafka-verkeer voor alle partities voorspelbaar wordt gerouteerd via dit ene eindpunt in plaats van firewalltoegang te vereisen voor alle brokers van een cluster.

Schalen in Event Hubs wordt bepaald door het aantal doorvoereenheden (RU's) of verwerkingseenheden dat u aanschaft. Als u de functie Automatisch vergroten voor een standaardlaagnaamruimte inschakelt, worden met Event Hubs automatisch TU's opgeschaald wanneer u de doorvoerlimiet bereikt. Deze functie werkt ook met de ondersteuning van het Apache Kafka-protocol. Voor een naamruimte in de Premium-laag kunt u het aantal verwerkingseenheden verhogen dat is toegewezen aan de naamruimte.

Is Apache Kafka de juiste oplossing voor uw workload?

Het is ook handig om te begrijpen dat Azure Event Hubs deel uitmaakt van een reeks services, waaronder Azure Service Bus en Azure Event Grid, afkomstig zijn van het bouwen van toepassingen met Apache Kafka.

Hoewel sommige providers van commerciële distributies van Apache Kafka kunnen suggereren dat Apache Kafka een one-stop-shop is voor al uw berichtenplatformbehoeften, is de realiteit dat Apache Kafka bijvoorbeeld geen ondersteuning biedt voor publiceren-abonneren op een niveau waarmee abonnees toegang hebben tot de inkomende berichten op basis van regels die zijn gebaseerd op server-geëvalueerde regels dan gewone offsets. en het heeft geen faciliteiten voor het bijhouden van de levenscyclus van een taak die is geïnitieerd door een bericht of het sidelineren van defecte berichten in een wachtrij met dode letters, die allemaal fundamenteel zijn voor veel bedrijfsberichtenscenario's.

Zie de Asynchrone berichtopties in Azure-richtlijnen voor meer informatie over de verschillen tussen patronen en welk patroon het beste wordt gedekt door welke service. Als Apache Kafka-gebruiker kunt u vinden dat communicatiepaden die u tot nu toe met Kafka hebt gerealiseerd, kunnen worden gerealiseerd met veel minder eenvoudige complexiteit en nog krachtigere mogelijkheden met behulp van Event Grid of Service Bus.

Als u specifieke functies van Apache Kafka nodig hebt die niet beschikbaar zijn via de Event Hubs voor de Apache Kafka-interface of als uw implementatiepatroon de Quota voor Event Hubs overschrijdt, kunt u ook een systeemeigen Apache Kafka-cluster uitvoeren in Azure HDInsight.

Verificatie en beveiliging

Telkens wanneer u gebeurtenissen publiceert of gebruikt vanuit een Event Hubs voor Kafka, probeert uw client toegang te krijgen tot de Event Hubs-resources. U wilt ervoor zorgen dat de resources worden geopend met behulp van een geautoriseerde entiteit. Wanneer u het Apache Kafka-protocol met uw clients gebruikt, kunt u uw configuratie voor verificatie en versleuteling instellen met behulp van de SASL-mechanismen. Wanneer u Event Hubs voor Kafka gebruikt, is TLS-versleuteling vereist (aangezien alle gegevens die worden verzonden met Event Hubs TLS zijn versleuteld), kan dit worden gedaan door de optie SASL_SSL in uw configuratiebestand op te geven.

Azure Event Hubs biedt meerdere opties voor het autoriseren van toegang tot uw beveiligde resources.

  • OAuth 2.0
  • Shared Access Signature (SAS)

OAuth 2.0

Event Hubs kan worden geïntegreerd met Microsoft Entra ID, die een gecentraliseerde OAuth 2.0-autorisatieserver biedt. Met Microsoft Entra ID kunt u op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) gebruiken om fijnmazige machtigingen te verlenen aan uw clientidentiteiten. U kunt deze functie gebruiken met uw Kafka-clients door SASL_SSL op te geven voor het protocol en OAUTHBEARER voor het mechanisme. Zie Toegang autoriseren met Microsoft Entra-id voor meer informatie over Azure-rollen en -niveaus voor bereiktoegang.

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

Notitie

De bovenstaande configuratie-eigenschappen zijn voor de Java-programmeertaal. Zie voorbeelden op GitHub voor voorbeelden die laten zien hoe u OAuth gebruikt met Event Hubs voor Kafka met behulp van verschillende programmeertalen.

Shared Access Signature (SAS)

Event Hubs biedt ook de Shared Access Signatures (SAS) voor gedelegeerde toegang tot Event Hubs voor Kafka-resources. Het autoriseren van toegang met behulp van een op OAuth 2.0-token gebaseerd mechanisme biedt superieure beveiliging en gebruiksgemak via SAS. De ingebouwde rollen kunnen ook de noodzaak voor autorisatie op basis van ACL elimineren, die door de gebruiker moet worden onderhouden en beheerd. U kunt deze functie gebruiken met uw Kafka-clients door SASL_SSL op te geven voor het protocol en PLAIN voor het mechanisme.

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}";

Belangrijk

Vervang {YOUR.EVENTHUBS.CONNECTION.STRING} door de verbindingsreeks voor uw Event Hubs-naamruimte. Zie Een verbindingsreeks voor Event Hubs ophalen voor instructies voor het ophalen van de verbindingsreeks. Hier volgt een voorbeeldconfiguratie: sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="Endpoint=sb://mynamespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXXXXXXXXXXXXXX";

Notitie

Wanneer u SAS-verificatie gebruikt met Kafka-clients, worden tot stand gebrachte verbindingen niet verbroken wanneer de SAS-sleutel opnieuw wordt gegenereerd.

Notitie

Gegenereerde handtekeningtokens voor gedeelde toegang worden niet ondersteund bij het gebruik van de Event Hubs voor het Apache Kafka-eindpunt.

Voorbeelden

Zie quickstart: Gegevens streamen met Event Hubs met behulp van het Kafka-protocol voor een zelfstudie met stapsgewijze instructies voor het maken van een Event Hub en deze openen met behulp van SAS of OAuth.

Andere Azure Event Hubs-functies

De functie Event Hubs voor Apache Kafka is een van de drie protocollen die gelijktijdig beschikbaar zijn in Azure Event Hubs, die HTTP en AMQP aanvullen. U kunt met elk van deze protocollen schrijven en met een andere protocollen lezen, zodat uw huidige Apache Kafka-producenten kunnen blijven publiceren via Apache Kafka, maar uw lezer kan profiteren van de systeemeigen integratie met de AMQP-interface van Event Hubs, zoals Azure Stream Analytics of Azure Functions. Daarentegen kunt u Azure Event Hubs gemakkelijk integreren in AMQP-routeringsnetwerken als een doeleindpunt en toch gegevens lezen via Apache Kafka-integraties.

Daarnaast werken Event Hubs-functies zoals Capture, waarmee uiterst kostenefficiënte langetermijnarchivering mogelijk is via Azure Blob Storage en Azure Data Lake Storage, en geo-herstel na noodgevallen ook met de functie Event Hubs voor Kafka.

Idempotentie

Azure Event Hubs voor Apache Kafka ondersteunt zowel idempotente producenten als idempotente consumenten.

Een van de kernten van Azure Event Hubs is het concept van ten minste één levering . Deze aanpak zorgt ervoor dat gebeurtenissen altijd worden afgeleverd. Het betekent ook dat gebeurtenissen meer dan één keer, zelfs herhaaldelijk, kunnen worden ontvangen door consumenten zoals een functie. Daarom is het belangrijk dat de consument het idempotente consumentenpatroon ondersteunt.

Functieverschillen met Apache Kafka

Het doel van Event Hubs voor Apache Kafka is om toegang te bieden tot Azure Event Hubs-mogelijkheden voor toepassingen die zijn vergrendeld in de Apache Kafka-API en anders moeten worden ondersteund door een Apache Kafka-cluster.

Zoals hierboven is uitgelegd, biedt de Azure Messaging-vloot uitgebreide en robuuste dekking voor een groot aantal berichtenscenario's. Hoewel de volgende functies momenteel niet worden ondersteund via de ondersteuning van Event Hubs voor de Apache Kafka-API, wijzen we erop waar en hoe de gewenste mogelijkheid beschikbaar is.

Transacties

Azure Service Bus biedt robuuste transactieondersteuning waarmee u berichten en sessies kunt ontvangen en vereffenen terwijl uitgaande berichten worden verzonden die het gevolg zijn van berichtverwerking naar meerdere doelentiteiten onder de consistentiebeveiliging van een transactie. De functieset staat niet alleen exact één keer toe dat elk bericht in een reeks wordt verwerkt, maar voorkomt ook het risico dat een andere consument per ongeluk dezelfde berichten opnieuw verwerkt als bij Apache Kafka. Service Bus is de aanbevolen service voor transactionele berichtworkloads.

Compressie

De compressiefunctie aan de clientzijde van Apache Kafka comprimeert een batch met meerdere berichten in één bericht aan de kant van de producent en decomprimeert de batch aan de consumentenzijde. De Apache Kafka-broker behandelt de batch als een speciaal bericht.

Ontwikkelaars van kafka-producententoepassingen kunnen berichtcompressie inschakelen door de eigenschap compression.type in te stellen. In de openbare preview wordt het enige ondersteunde compressie-algoritme gzip.

Compression.type = none | gzip

De functie wordt momenteel alleen ondersteund voor apache Kafka-verkeersproducent en consumentenverkeer. AMQP-consument kan gecomprimeerd Kafka-verkeer verbruiken als gedecomprimeerde berichten. De nettolading van een Event Hubs-gebeurtenis is een bytestream en de inhoud kan worden gecomprimeerd met een algoritme van uw keuze, maar in openbare preview is de enige optie gzip. De voordelen van het gebruik van Kafka-compressie zijn via een kleinere berichtgrootte, een grotere nettolading die u kunt verzenden en lager resourceverbruik van berichtenbroker.

Kafka Streams

Kafka Streams is een clientbibliotheek voor Stream Analytics die deel uitmaakt van het opensource-project van Apache Kafka, maar is gescheiden van de Apache Kafka-gebeurtenisbroker.

De meest voorkomende reden dat Klanten van Azure Event Hubs om kafka Streams-ondersteuning vragen, is omdat ze geïnteresseerd zijn in het 'ksqlDB'-product van Confluent. "ksqlDB" is een eigen gedeeld bronproject dat een licentie heeft, zodat geen enkele leverancier 'software-as-a-service, platform-as-a-service, infrastructuur-as-a-service of andere vergelijkbare onlineservices die concurreren met Confluent-producten of -services' toestaat om ksqlDB-ondersteuning te gebruiken of aan te bieden. Als u ksqlDB gebruikt, moet u Kafka zelf uitvoeren of moet u de cloudaanbiedingen van Confluent gebruiken. De licentievoorwaarden kunnen ook van invloed zijn op Azure-klanten die services aanbieden voor een doel dat is uitgesloten door de licentie.

Zelfstandige en zonder ksqlDB heeft Kafka Streams minder mogelijkheden dan veel alternatieve frameworks en services, waarvan de meeste ingebouwde STREAMING SQL-interfaces hebben, en die allemaal tegenwoordig worden geïntegreerd met Azure Event Hubs:

De vermelde services en frameworks kunnen over het algemeen gebeurtenisstromen verkrijgen en rechtstreeks verwijzen naar gegevens uit een diverse set bronnen via adapters. Kafka Streams kunnen alleen gegevens verkrijgen van Apache Kafka en uw analyseprojecten worden daarom vergrendeld in Apache Kafka. Als u gegevens uit andere bronnen wilt gebruiken, moet u eerst gegevens importeren in Apache Kafka met het Kafka-Verbinding maken-framework.

Als u het Kafka Streams-framework in Azure moet gebruiken, biedt Apache Kafka in HDInsight u die optie. Apache Kafka in HDInsight biedt volledige controle over alle configuratieaspecten van Apache Kafka, terwijl deze volledig is geïntegreerd met verschillende aspecten van het Azure-platform, van plaatsing van fout-/updatedomein tot netwerkisolatie tot bewakingsintegratie.

Volgende stappen

Dit artikel bevat een inleiding tot Event Hubs voor Kafka. Zie Ontwikkelaarshandleiding van Apache Kafka voor Azure Event Hubs voor meer informatie.

Zie quickstart: Gegevens streamen met Event Hubs met behulp van het Kafka-protocol voor een zelfstudie met stapsgewijze instructies voor het maken van een Event Hub en deze openen met behulp van SAS of OAuth.

Zie ook de OAuth-voorbeelden op GitHub.