Gebruik Azure Event Hubs van Apache Kafka-toepassingen
Event Hubs biedt een eindpunt dat compatibel is met de producer- en consumer-API's van Apache Kafka® die door de meeste bestaande Apache Kafka-clienttoepassingen kunnen worden gebruikt als alternatief voor het uitvoeren van uw eigen Apache Kafka-cluster. Event Hubs ondersteunt Apache Kafka van de producer- en consumer-API's van Apache Kafka op versie 1.0 en hoger.
Wat biedt Event Hubs kafka?
De functie Event Hubs for Apache Kafka biedt een protocolhoofd boven op Azure Event Hubs dat compatibel is met protocol-compatibele Apache Kafka-clients die zijn gebouwd voor Apache Kafka-serverversies 1.0 en hoger en ondersteunt zowel lezen van als schrijven naar Event Hubs, wat gelijk is aan Apache Kafka-onderwerpen.
U kunt vaak het Event Hubs Kafka-eindpunt van uw toepassingen gebruiken zonder codewijzigingen in vergelijking met uw bestaande Kafka-installatie en alleen de configuratie wijzigen: werk de connection string bij in configuraties om te wijzen naar het Kafka-eindpunt dat beschikbaar wordt gemaakt door uw Event Hub in plaats van naar uw Kafka-cluster te wijzen. Vervolgens kunt u gebeurtenissen streamen vanuit uw toepassingen die gebruikmaken van het Kafka-protocol naar Event Hubs.
Conceptueel gezien zijn Kafka en Event Hubs zeer vergelijkbaar: het zijn beide gepartitiefde logboeken die zijn gebouwd voor het streamen van gegevens, waarbij de client bepaalt welk deel van het bewaarde logboek het wil lezen. In de volgende tabel worden concepten tussen Kafka en Event Hubs.
Conceptuele toewijzing van Kafka en Event Hub
| Kafka-concept | Event Hubs Concept |
|---|---|
| Cluster | Naamruimte |
| Onderwerp | Event Hub |
| Partitie | Partitie |
| Consumentengroep | Consumentengroep |
| Offset | Offset |
Belangrijkste verschillen tussen Apache Kafka en Event Hubs
Hoewel Apache Kafka software is die u doorgaans moet installeren en gebruiken, Event Hubs een volledig beheerde, cloudeigen service. Er zijn geen servers, schijven of netwerken om te beheren en te bewaken en er zijn nooit brokers om te overwegen of te configureren. U maakt een naamruimte, een eindpunt met een volledig gekwalificeerde domeinnaam, en vervolgens maakt u Event Hubs (onderwerpen) binnen die naamruimte.
Zie voor meer informatie Event Hubs en naamruimten Event Hubs functies. Als cloudservice gebruikt Event Hubs één stabiel virtueel IP-adres als eindpunt, zodat clients niets 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 op voorspelbare wijze via dit ene eindpunt wordt gerouteerd in plaats van firewalltoegang te vereisen voor alle brokers van een cluster.
Schaal in Event Hubs wordt bepaald door het aantal doorvoereenheden (TUS's) of verwerkingseenheden dat u koopt. Als u de functie Automatisch opschalen inschakelen voor een standaardlaagnaamruimte, Event Hubs automatisch de TUS omhoog wanneer u de doorvoerlimiet bereikt. Deze functie werkt ook met de Apache Kafka protocolondersteuning. Voor een Premier Tier-naamruimte kunt u het aantal verwerkingseenheden verhogen dat aan de naamruimte is toegewezen.
Is Apache Kafka de juiste oplossing voor uw workload?
Als u toepassingen bouwt met behulp van Apache Kafka, is het ook handig om te begrijpen dat Azure Event Hubs deel uitmaakt van een vloot van services, waaronder ook Azure Service Busen Azure Event Grid.
Hoewel sommige providers van commerciële distributies van Apache Kafka kunnen voorstellen dat Apache Kafka een one-stop-shop is voor al uw berichtenplatformbehoeften, is de realiteit dat Apache Kafka niet implementeert, bijvoorbeeld het patroon voor concurrerende consumentenwachtrijen, geen ondersteuning biedt voor publiceren-abonneren op een niveau dat abonnees toegang geeft tot de binnenkomende berichten op basis van door de server geëvalueerde regels, met andere dan gewone offsets, en het heeft geen mogelijkheden om de levenscyclus bij te houden van een taak die is geïnitieerd door een bericht of om foutberichten te sidelinen in een wachtrij voor in wachtrijen met in wachtrij geplaatste berichten, die allemaal de basis vormen voor veel zakelijke berichtenscenario's.
Zie de richtlijnen voor Asynchrone berichten in Azure voor meer informatie over de verschillen tussen patronen en welk patroon het beste wordt gedekt door welke service. Als Apache Kafka-gebruiker kan het zijn dat communicatiepaden die u tot nu toe hebt gerealiseerd met Kafka, met veel minder eenvoudige complexiteit en nog krachtigere mogelijkheden kunnen worden gerealiseerd 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 Apache Kafka-interface of als uw implementatiepatroon de Event Hubs-quotaoverschrijdt, kunt u ook een native Apache Kafka-cluster uitvoeren in Azure HDInsight.
Verificatie en beveiliging
Telkens wanneer u gebeurtenissen publiceert of verbruikt 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 gebruikt met behulp van een geautoriseerde entiteit. Wanneer u Apache Kafka-protocol gebruikt met uw clients, kunt u uw configuratie instellen voor verificatie en versleuteling met behulp van de SASL-mechanismen. Wanneer het Event Hubs voor Kafka de TLS-versleuteling vereist (omdat alle gegevens die worden verzonden met Event Hubs TLS zijn versleuteld), kan dit worden gedaan door de optie SASL_SSL op te geven in uw configuratiebestand.
Azure Event Hubs biedt meerdere opties om toegang tot uw beveiligde resources te verlenen.
- OAuth 2.0
- Shared Access Signature (SAS)
OAuth 2.0
Event Hubs kan worden geïntegreerd met Azure Active Directory (Azure AD), dat een gecentraliseerde autorisatieserver biedt die compatibel is met OAuth 2.0. Met Azure AD kunt u op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) gebruiken om fijnkeurige machtigingen te verlenen aan uw clientidentiteiten. U kunt deze functie gebruiken met uw Kafka-clients door een SASL_SSL voor het protocol en OAUTHBEARER op te geven voor het mechanisme. Zie Toegang machtigen met Azure AD voor meer informatie over Azure-rollen en -niveaus voor het bereik van toegang.
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
Shared Access Signature (SAS)
Event Hubs biedt ook de Shared Access Signatures (SAS) voor gedelegeerde toegang tot Event Hubs kafka-resources. Het autoriseren van toegang met behulp van een op OAuth 2.0-token gebaseerd mechanisme biedt een betere beveiliging en gebruiksgemak via SAS. De ingebouwde rollen kunnen ook de noodzaak van op ACL gebaseerde autorisatie elimineren, die moet worden onderhouden en beheerd door de gebruiker. U kunt deze functie gebruiken met uw Kafka-clients door een SASL_SSL voor het protocol en PLAIN op te geven 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 bestaande verbindingen niet verbroken wanneer de SAS-sleutel opnieuw wordt ge regenereerd.
Voorbeelden
Zie Quickstart: Gegevens streamen met Event Hubs met behulp van het Kafka-protocolvoor een zelfstudie met stapsgewijs instructies om een Event Hub te maken en deze te openen met behulp van SAS of OAuth.
Voor meer voorbeelden die laten zien hoe u OAuth gebruikt met Event Hubs voor Kafka, zie voorbeelden op GitHub.
Andere Event Hubs
De Event Hubs voor Apache Kafka-functie is een van de drie protocollen die gelijktijdig beschikbaar zijn op Azure Event Hubs, als aanvulling op HTTP en AMQP. U kunt met elk van deze protocollen schrijven en met elk ander protocol lezen, zodat uw huidige Apache Kafka-producenten kunnen doorgaan met 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 de Azure Event Hubs eenvoudig integreren in AMQP-routeringsnetwerken als een doel-eindpunt en toch gegevens lezen via Apache Kafka integraties.
Daarnaast bieden Event Hubs-functies zoals Capture,waarmee zeer rendabele langetermijnarchivering via Azure Blob Storage en Azure Data Lake Storage mogelijk is, en Geo Disaster-Recovery ook werken met de functie Event Hubs for Kafka.
Apache Kafka functieverschillen
Het doel van Event Hubs for Apache Kafka is om toegang te bieden tot de mogelijkheden van Azure Event Hub voor toepassingen die zijn vergrendeld in de Apache Kafka-API en anders door een Apache Kafka-cluster moeten worden back-Apache Kafka.
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, wordt uitgelegd waar en hoe de gewenste functionaliteit beschikbaar is.
Transacties
Azure Service Bus biedt robuuste transactieondersteuning waarmee berichten en sessies kunnen worden ontvangen en verwerkt tijdens het verzenden van uitgaande berichten die het gevolg zijn van berichtverwerking naar meerdere doelentiteiten onder de consistentiebeveiliging van een transactie. De functieset staat niet alleen exact één verwerking van elk bericht in een reeks toe, 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 kant van de consument. De Apache Kafka broker behandelt de batch als een speciaal bericht.
Deze functie is in principe in strijd met het multi-protocolmodel van Azure Event Hubs, waarmee berichten, zelfs berichten die in batches worden verzonden, afzonderlijk kunnen worden opgehaald van de broker en via elk protocol.
De nettolading van een Event Hub-gebeurtenis is een bytestroom en de inhoud kan worden gecomprimeerd met een algoritme van uw keuze. De indeling voor Apache Avro-codering ondersteunt compressie in het eigen taal.
Logboekcompactie
Apache Kafka logboekcompactie is een functie waarmee alle sleutels behalve de laatste record van een partitie kunnen worden weggenomen. Hierdoor wordt een Apache Kafka-onderwerp in een sleutel-waardeopslag geplaatst, waarbij de laatste toegevoegde waarde de vorige overschrijven. Deze functie wordt momenteel niet geïmplementeerd door Azure Event Hubs. Het patroon sleutel-waardeopslag, zelfs met regelmatige updates, wordt veel beter ondersteund door databaseservices zoals Azure Cosmos DB. Zie Projectie van logboeken voor meer informatie.
Kafka-Streams
Kafka Streams is een clientbibliotheek voor Stream Analytics die deel uitmaakt van het opensource-project Apache Kafka, maar is gescheiden van Apache Kafka event stream broker.
De meest voorkomende reden Azure Event Hubs dat klanten om ondersteuning voor Kafka Streams vragen, is omdat ze geïnteresseerd zijn in het 'ksqlDB'-product van Confluent. 'ksqlDB' is een eigen gedeelde bronproject met een licentie die zodanig is gelicentieerd dat geen enkele leverancier die 'software-as-a-service, platform-as-a-service, infrastructure-as-a-service of andere vergelijkbare onlineservices aanbiedt die concurreren met Confluent-producten of -services' ksqlDB-ondersteuning mag gebruiken of aanbieden. Als u ksqlDB gebruikt, moet u Kafka zelf gebruiken of de cloudaanbiedingen van Confluent gebruiken. De licentievoorwaarden kunnen ook van invloed zijn op Azure-klanten die services aanbieden voor een doel dat wordt uitgesloten door de licentie.
Zelfstandig 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 zijn geïntegreerd met Azure Event Hubs vandaag de dag:
- Azure Stream Analytics
- Azure Synapse Analytics (via Event Hubs Capture)
- Azure Databricks
- Apache Samza
- Apache Storm
- Apache Spark
- Apache Flink
- Akka Streams
De vermelde services en frameworks kunnen over het algemeen gebeurtenisstromen verkrijgen en rechtstreeks vanuit een diverse set bronnen via adapters verwijzen naar gegevens. Kafka Streams kan alleen gegevens verkrijgen van Apache Kafka en uw analyseprojecten zijn 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 hdinsight biedt volledige controle over alle configuratieaspecten van Apache Kafka, terwijl het volledig is geïntegreerd met verschillende aspecten van het Azure-platform, van fout-/updatedomeinplaatsing tot netwerkisolatie tot bewakingsintegratie.
Volgende stappen
Dit artikel heeft een inleiding gegeven tot Event Hubs voor Kafka. Zie Ontwikkelaarshandleiding van Apache Kafka voor Azure Event Hubs voor meer informatie.