Partager via


Qu’est-ce qu’Azure Event Hubs pour Apache Kafka ?

Cet article explique comment utiliser Azure Event Hubs pour envoyer en streaming les données d’applications Apache Kafka sans configurer de cluster Kafka.

Présentation

Azure Event Hubs fournit un point de terminaison Apache Kafka sur un hub d’événements, qui permet aux utilisateurs de se connecter au hub d’événements à l’aide du protocole Kafka. Bien souvent, il st possible d’utiliser le point de terminaison Kafka d’un hub d’événements à partir de vos applications sans modifier une ligne de code. Vous modifiez uniquement la configuration : il s’agit de mettre à jour la chaîne de connexion dans les configurations pour pointer vers le point de terminaison Kafka exposé par votre hub d’événements au lieu de pointer vers votre cluster Kafka. Vous pouvez ensuite commencer à diffuser des événements en continu à partir de vos applications qui utilisent le protocole Kafka dans Event Hubs, qui équivalent à des rubriques Kafka.

Pour approfondir la migration de vos applications Apache Kafka vers Azure Event Hubs, reportez-vous au guide de migration.

Remarque

  • Cette fonctionnalité est prise en charge uniquement dans les niveaux **standard, Premium et dédié .
  • Event Hubs pour les écosystèmes Apache Kafka prend en charge Apache Kafka version 1.0 et ultérieure.

Mappage des concepts Apache Kafka et Azure Event Hubs

D’un point de vue conceptuel, Apache Kafka et Event Hubs présentent de nombreuses similitudes. Ce sont tous les deux des journaux partitionnés conçus pour la diffusion de données en continu, le client contrôlant la partie à lire dans le journal conservé. Le tableau ci-dessous établit la correspondance des concepts entre Apache Kafka et Event Hubs.

Concept Apache Kafka Concept Event Hubs
Cluster Espace de noms
Rubrique Un hub d’événements
Partition Partition
Groupe de consommateurs Groupe de consommateurs
Décalage Décalage

Les fonctionnalités d’Apache Kafka sont prises en charge sur Azure Event Hubs.

Kafka Streams

Kafka Streams est une bibliothèque cliente dédiée au traitement de flux, intégrée au projet open source Apache Kafka, mais distincte du courtier d’événements Apache Kafka.

Remarque

Kafka Streams est actuellement en aperçu public dans les niveaux Premium et Dédié.

Azure Event Hubs prend en charge la bibliothèque cliente Kafka Streams. Des informations et concepts complémentaires sont disponibles ici.

Généralement, les clients Azure Event Hubs demandent la prise en charge de Kafka Streams parce qu'ils s'intéressent au produit « ksqlDB » de Confluent. « ksqlDB » est un projet propriétaire à source partagée qui est concédé sous licence de manière à ce qu'aucun fournisseur « proposant des logiciels en tant que service, une plateforme en tant que service, une infrastructure en tant que service ou d'autres services en ligne similaires en concurrence avec les produits ou services Confluent » ne soit autorisé à utiliser ou à offrir la prise en charge « ksqlDB ». En pratique, si vous utilisez ksqlDB, vous devez exploiter Kafka vous-même ou utiliser les offres cloud de Confluent. Les termes du contrat de licence peuvent également s'appliquer aux clients Azure qui offrent des services à des fins exclues par la licence.

Autonome et non doté de ksqlDB, Kafka Streams possède moins de fonctionnalités que de nombreux frameworks et services alternatifs, dont la plupart disposent d'interfaces SQL intégrées de diffusion en continu, et qui s'intègrent toutes à Azure Event Hubs :

Transactions Kafka

Remarque

Les transactions Kafka sont actuellement en aperçu public dans le niveau Premium et dédié.

Azure Event Hubs prend en charge les transactions Kafka. Pour plus d’informations sur la prise en charge et les concepts, consultez les transactions Apache Kafka.

Compression

Remarque

La compression Kafka pour Event Hubs est actuellement prise en charge uniquement dans les niveaux Premium et Dédié.

La compression côté client dans les clients Apache Kafka permet de réduire l’utilisation des ressources de calcul et de la bande passante en compressant, côté producteur, un lot de messages en un seul message, puis en le décompressant côté consommateur. Le répartiteur Apache Kafka traite le lot comme un message spécial.

Les développeurs d’applications de producteur Kafka peuvent activer la compression des messages en définissant la compression.type propriété. Azure Event Hubs prend actuellement en charge la compression gzip.


Compression.type = none | gzip

Bien que cette fonctionnalité soit limitée au trafic des producteurs et des consommateurs Apache Kafka, les consommateurs AMQP peuvent lire le trafic Kafka compressé sous forme de messages décompressés.

Principales différences entre Apache Kafka et Azure Event Hubs

Apache Kafka est un logiciel que vous devez généralement installer pour l'utiliser, tandis qu'Event Hubs est un service natif Cloud complètement managé. Il n'y a aucun serveur, disque ou réseau à gérer et à surveiller, ni aucun répartiteur à configurer. Vous créez un espace de noms, qui est un point de terminaison avec un nom de domaine complet, puis vous créez des hubs d'événements (rubriques) dans cet espace de noms.

Pour plus d’informations sur les espaces de noms et Event Hubs, consultez Fonctionnalités Event Hubs. En tant que service cloud, Event Hubs utilise une seule adresse IP virtuelle stable comme point de terminaison, les clients n’ont donc pas besoin de connaître les répartiteurs ou machines dans un cluster. Même si Event Hubs implémente le même protocole, cette différence signifie que l'ensemble du trafic Kafka de toutes les partitions est acheminé de manière prévisible via ce point de terminaison ; l'accès à un pare-feu n'est donc pas nécessaire pour les répartiteurs d'un cluster.

La mise à l’échelle en Event Hubs est contrôlée par le nombre d'unités de débit ou d'unités de traitement que vous achetez. Si vous activez la fonctionnalité de dégonflage automatique pour un espace de noms de niveau standard, Event Hubs met automatiquement à l’échelle les unités de traitement quand vous atteignez la limite de débit. Cela fonctionne également avec la prise en charge du protocole Apache Kafka. Pour un espace de noms de niveau Premium, il est possible d’augmenter le nombre d’unités de traitement associées à l’espace de noms.

Apache Kafka convient-il à votre charge de travail ?

Si vous venez d’un arrière-plan de création d’applications qui utilisent Apache Kafka, il est également utile de comprendre qu’Azure Event Hubs fait partie d’une flotte de services qui inclut également Azure Service Bus et Azure Event Grid.

Même si certains fournisseurs de distributions commerciales d’Apache Kafka peuvent suggérer qu’Apache Kafka est un guichet unique pour tous vos besoins de plateforme de messagerie, la réalité est qu’Apache Kafka n’implémente pas, par exemple, le modèle de file d’attente competing-consumer. Elle ne prend pas en charge la publication-abonnement à un niveau qui permet aux abonnés d’accéder aux messages entrants en fonction de règles évaluées par le serveur autres que les décalages bruts. Il n’existe aucun mécanisme permettant de suivre le cycle de vie d’un travail déclenché par un message ni d’isoler les messages défectueux dans une file d’attente de messages non livrés. Toutes ces fonctionnalités sont fondamentales pour de nombreux scénarios de messagerie d’entreprise.

Pour comprendre les différences entre les modèles et déterminer quel modèle est le mieux couvert par tel ou tel service, consultez l'aide relative aux Options de messagerie asynchrone dans Azure. En tant qu'utilisateur d'Apache Kafka, vous pouvez constater que les voies de communication que vous avez réalisées avec Kafka peuvent être réalisées avec beaucoup moins de complexité de base et des capacités encore plus puissantes en utilisant Event Grid ou Service Bus.

Si vous avez besoin de fonctionnalités Apache Kafka spécifiques non disponibles via l'interface d'Event Hubs pour Apache Kafka, ou si votre modèle d'implémentation dépasse les quotas d'Event Hubs, vous pouvez également exécuter un cluster Apache Kafka natif dans Azure HDInsight.

Sécurité et authentification

Chaque fois que vous publiez ou consommez des événements à partir d’un Event Hubs pour Kafka, votre client tente d’accéder aux ressources Event Hubs. Vous voulez assurer l'accès aux ressources à l’aide d’une entité autorisée. Lorsque vous utilisez le protocole Apache Kafka avec vos clients, définissez votre configuration pour l’authentification et le chiffrement à l’aide des mécanismes SASL. Lors de l’utilisation d’Event Hubs pour Kafka, le chiffrement TLS est requis (car toutes les données en transit avec Event Hubs sont chiffrées PAR TLS). Vous pouvez spécifier l’option SASL_SSL dans votre fichier de configuration.

Azure Event Hubs fournit plusieurs options pour autoriser l’accès à vos ressources sécurisées :

  • OAuth 2.0
  • Signature d’accès partagé (SAP)

OAuth 2.0

Event Hubs s’intègre à Microsoft Entra ID, qui fournit un serveur d’autorisation centralisé conforme à OAuth 2.0. En utilisant l’ID Microsoft Entra, vous pouvez utiliser le contrôle d’accès en fonction du rôle Azure (Azure RBAC) pour accorder des autorisations affinées à vos identités clientes. Utilisez cette fonctionnalité avec vos clients Kafka en spécifiant SASL_SSL pour le protocole et OAUTHBEARER pour le mécanisme. Pour plus d’informations sur les rôles et les niveaux Azure applicables à la portée de l’accès, consultez Autoriser l’accès avec 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

Remarque

Ces propriétés de configuration s’appliquent au langage de programmation Java. Pour obtenir des exemples montrant comment utiliser OAuth avec Event Hubs pour Kafka au moyen de différents langages de programmation, consultez les exemples sur GitHub.

Signature d’accès partagé (SAS)

Event Hubs fournit également des signatures d’accès partagé (SAP) pour l’accès délégué à Event Hubs pour les ressources Kafka. L’autorisation de l’accès à l’aide du mécanisme basé sur des jetons OAuth 2.0 offre une sécurité et une facilité d’utilisation supérieures sur SAS. Les rôles intégrés peuvent également éliminer la nécessité d’une autorisation basée sur ACL, que vous devez maintenir et gérer. Vous pouvez utiliser cette fonctionnalité avec vos clients Kafka en spécifiant SASL_SSL pour le protocole et PLAIN pour le mécanisme.

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

Important

Remplacez {YOUR.EVENTHUBS.CONNECTION.STRING} par la chaîne de connexion de votre espace de noms Event Hubs. Pour savoir comment obtenir la chaîne de connexion, consultez Obtenir une chaîne de connexion Event Hubs. Voici un exemple de configuration : sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="Endpoint=sb://mynamespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXXXXXXXXXXXXXX";

Remarque

Si vous utilisez l’authentification SAS avec les clients Kafka, les connexions établies ne sont pas déconnectées lorsque la clé SAS est regénérée.

Remarque

Les jetons de signature d’accès partagé générés ne sont pas pris en charge lors de l’utilisation d’Event Hubs pour le point de terminaison Apache Kafka.

Exemples

Pour consulter un tutoriel avec des instructions pas à pas afin de créer un Event Hub et y accéder à l’aide d’une signature d’accès partagé ou OAuth, consultez Démarrage rapide : Streaming de données avec Event Hubs en utilisant le protocole Kafka.

Autres fonctionnalités Azure Event Hubs

La fonctionnalité Event Hubs pour Apache Kafka constitue l’un des trois protocoles disponibles simultanément sur Azure Event Hubs, aux côtés de HTTP et d’AMQP. Vous pouvez écrire avec l'un de ces protocoles et lire avec un autre, afin de permettre à vos producteurs Apache Kafka actuels de continuer à publier via Apache Kafka, mais votre lecteur peut bénéficier de l'intégration native à l'interface AMQP d'Event Hubs, comme Azure Stream Analytics ou Azure Functions. À l’inverse, vous pouvez facilement intégrer Azure Event Hubs dans les réseaux de routage AMQP en tant que point de terminaison cible, tout en lisant les données par le biais d’intégrations Apache Kafka.

En outre, les fonctionnalités Event Hubs telles que Capture, qui permet un archivage à long terme extrêmement économique via Stockage Blob Azure et Azure Data Lake Storage, et Géo-reprise d'activité après sinistre sont également compatibles avec Event Hubs pour Kafka.

Idempotence

Azure Event Hubs pour Apache Kafka prend en charge les producteurs idempotents et les consommateurs idempotents.

L’un des principes fondamentaux d’Azure Event Hubs est le concept de remise au moins une fois. Cette approche garantit que les événements sont toujours remis. Cela signifie également que les consommateurs peuvent recevoir des événements plusieurs fois, même à plusieurs reprises. Pour cette raison, il est important que le consommateur prenne en charge le modèle de consommateur idempotent.

Cet article présente Event Hubs pour Kafka. Pour en savoir plus, consultez Guide du développeur Apache Kafka pour Azure Event Hubs.

Pour consulter un tutoriel avec des instructions pas à pas afin de créer un Event Hub et y accéder à l’aide d’une signature d’accès partagé ou OAuth, consultez Démarrage rapide : Streaming de données avec Event Hubs en utilisant le protocole Kafka.

Consultez également les exemples OAuth sur GitHub.