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.
Zie de migratiehandleiding voor meer informatie over het migreren van uw Kafka-toepassingen naar Azure Event Hubs.
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 |
Apache Kafka-functies die worden ondersteund in Azure Event Hubs
Kafka Streams
Notitie
Kafka Streams is momenteel beschikbaar als openbare preview-versie in de Premium- en Dedicated-laag.
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.
Azure Event Hubs ondersteunt de Kafka Streams-clientbibliotheek, met details en concepten die hier beschikbaar zijn.
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:
- Azure Stream Analytics
- Azure Synapse Analytics (via Event Hubs Capture)
- Azure Databricks
- Apache Samza
- Apache Storm
- Apache Spark
- Apache Flink
- Apache Flink in HDInsight op AKS
- Akka Streams
Kafka-transacties
Notitie
Kafka Transactions is momenteel beschikbaar als openbare preview-versie in Premium en dedicated.
Azure Event Hubs ondersteunt Kafka-transacties. Meer informatie over de ondersteuning en concepten vindt u hier
Compressie
Notitie
De Kafka-compressie voor Event Hubs wordt momenteel alleen ondersteund in Premium- en Dedicated-lagen.
De compressiefunctie aan de clientzijde in Apache Kafka-clients bespaart rekenresources en bandbreedte door een batch met meerdere berichten te comprimeren in één bericht aan de kant van de producent en de batch aan de consumentenzijde te decomprimeren. 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. Azure Event Hubs ondersteunt gzip
momenteel compressie.
Compression.type = none | gzip
Hoewel de functie alleen wordt ondersteund voor apache Kafka-verkeersproducent en consumentenverkeer, kan de AMQP-consument gecomprimeerd Kafka-verkeer gebruiken als gedecomprimeerde berichten.
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.
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.