Connexion de données Azure Event Hubs
Azure Event Hubs est une plateforme de streaming de Big Data et un service d’ingestion d’événements. Azure Data Explorer offre une ingestion continue à partir des hubs d’événements gérés par le client.
Le pipeline d’ingestion Event Hubs transfère les événements à Azure Data Explorer en plusieurs étapes. Tout d’abord, vous créez un hub d’événements dans le Portail Azure. Créez ensuite une table cible dans Azure Data Explorer dans laquelle les données dans un format particulier sont ingérées à l’aide des propriétés d’ingestion fournies. La connexion Event Hubs doit être consciente du routage des événements. Les données peuvent être incorporées avec des propriétés sélectionnées en fonction des propriétés du système d’événements. Créez une connexion à Event Hubs pour créer un hub d’événements et envoyer des événements. Ce processus peut être géré par le biais du portail Azure, programmatiquement avec C# ou Python, ou avec le modèle Azure Resource Manager.
Pour obtenir des informations générales sur l’ingestion de données dans Azure Data Explorer, consultez Vue d’ensemble de l’ingestion des données dans Azure Data Explorer.
Options d’authentification de connexion de données Azure Data Explorer
Connexion de données basée sur une identité managée (recommandée) : l’utilisation d’une connexion de données basée sur une identité managée est le moyen le plus sécurisé de se connecter à des sources de données. Elle offre un contrôle total sur la possibilité d’extraire des données à partir d’une source de données. La configuration d’une connexion de données avec une identité managée nécessite les étapes suivantes :
- Ajouter une identité managée à votre cluster.
- Accorder des autorisations à l’identité managée sur la source de données. Pour extraire des données à partir d’Azure Event Hubs, l’identité managée doit disposer des autorisations du récepteur de données Azure Event Hubs.
- Définissez une stratégie d’identité managée sur les bases de données cibles.
- Créez une connexion de données à l’aide de l’authentification par identité managée pour extraire les données.
Attention
Si les autorisations d’identité managée sont supprimées de la source de données, la connexion de données ne fonctionnera plus et ne pourra plus extraire de données de la source de données.
Connexion de données basée sur des clés : si une authentification par identité managée n’est pas spécifiée pour la connexion de données, la connexion est automatiquement définie par défaut sur l’authentification basée sur des clés. Les connexions basées sur des clés extraient des données à l’aide d’une chaîne de connexion de ressource, telle que la chaîne de connexion Azure Event Hubs. Azure Data Explorer obtient la chaîne de connexion de ressource pour la ressource spécifiée et l’enregistre de façon sécurisée. La chaîne de connexion est ensuite utilisée pour extraire des données de la source de données.
Attention
Si la clé fait l’objet d’une rotation, la connexion de données ne fonctionnera plus et ne pourra plus extraire les données de la source de données. Pour résoudre le problème, mettez à jour ou recréez la connexion de données.
Format de données
- Les données sont lues à partir du hub d’événements sous forme d’objets EventData.
- Examinez les formats pris en charge.
Remarque
- L’ingestion à partir d’Event Hubs ne prend pas en charge le format RAW.
- Le registre de schémas Azure Event Hubs et Avro sans schéma ne sont pas pris en charge.
- Les données peuvent être compressées en utilisant l’algorithme de compression
gzip
. Vous pouvez spécifierCompression
de manière dynamique avec des propriétés d’ingestion ou dans les paramètres de connexion de données statiques. - La compression des données n’est pas prise en charge pour les formats binaires (ApacheAvro, Parquet, ORC et W3CLOGFILE).
- L’encodage personnalisé et les propriétés système incorporées ne sont pas pris en charge sur les données compressées et les formats binaires.
- Lors de l’utilisation de formats binaires (Avro, ApacheAvro, Parquet, ORC et W3CLOGFILE) et de routages d’ingestion, l’ordre des champs dans la définition du routage d’ingestion doit correspondre à l’ordre des colonnes correspondantes dans la table.
Propriétés d’Event Hubs
Azure Data Explorer prend en charge les propriétés d’Event Hubs suivantes :
- Un ensemble fermé de propriétés d’ingestion, qui permet de router l’événement vers la table appropriée.
- Un ensemble fermé de propriétés du système d’événements, qui peut être incorporé dans les données en fonction d’un mappage donné.
Remarque
L’ingestion de propriétés personnalisées d’Event Hubs, utilisées pour associer des métadonnées à des événements, n’est pas prise en charge. Si vous devez ingérer des propriétés personnalisées, envoyez-les dans le corps des données d’événement. Pour plus d’informations, consultez Ingérer des propriétés personnalisées.
Propriétés d’ingestion
Les propriétés d’ingestion déterminent le processus d’ingestion, où router les données et comment les traiter. Vous pouvez spécifier les propriétés d’ingestion de l’ingestion des événements avec EventData.Properties. Vous pouvez définir les propriétés suivantes :
Remarque
Les noms de propriété respectent la casse.
Propriété | Description |
---|---|
Base de données | Nom de la base de données cible, respectant la casse. Par défaut, les données sont ingérées dans la base de données cible associée à la connexion de données. Utilisez cette propriété pour remplacer la base de données par défaut et envoyer les données à une autre base de données. Pour ce faire, vous devez d’abord configurer la connexion en tant que connexion à plusieurs bases de données. |
Table | Nom de la table cible existante, respectant la casse. Remplace le paramètre Table défini dans le volet Data Connection . |
Format | Format de données. Remplace le paramètre Data format défini dans le volet Data Connection . |
IngestionMappingReference | Nom du mappage d’ingestion existant à utiliser. Remplace le paramètre Column mapping défini dans le volet Data Connection . |
Compression | Compression de données, None (par défaut) ou gzip . |
Encodage | Encodage des données, la valeur par défaut est UTF8. Il peut s’agir de l’un des encodages pris en charge par .NET. |
Étiquettes | Liste d’étiquettes à associer aux données ingérées, sous forme de chaîne de tableau JSON. L’utilisation d’étiquettes a des répercussions sur les performances. |
RawHeaders | Indique que la source d’événement est Kafka et qu’Azure Data Explorer doit utiliser la désérialisation du tableau d’octets pour lire d’autres propriétés de routage. La valeur est ignorée. |
Remarque
Seuls les événements mis en file d’attente après la création de la connexion de données sont ingérés, sauf si une date de début de récupération personnalisée est fournie. Dans tous les cas, la période de recherche ne peut pas dépasser la période de rétention event Hub réelle.
Routage d’événements
Quand vous créez une connexion de données à votre cluster, vous pouvez spécifier le routage pour l’emplacement où les données ingérées doivent être envoyées. Le routage par défaut se fait vers la table cible spécifiée dans la chaîne de connexion associée à la base de données cible. Le routage par défaut de vos données est également appelé routage statique. Vous pouvez spécifier une autre option de routage et de traitement pour vos données en définissant une ou plusieurs propriétés de données d’événement mentionnées dans le paragraphe précédent.
Remarque
La connexion de données Event Hubs tente de traiter tous les événements qu’il lit à partir d’Event Hub, et chaque événement qu’il ne peut pas traiter pour une raison quelconque sera signalé comme une défaillance d’ingestion. Découvrez comment surveiller l’ingestion d’Azure Data Explorer ici.
Router les données d’événement vers une autre base de données
Par défaut, le routage des données vers une autre base de données est désactivé. Pour envoyer les données vers une autre base de données, vous devez d’abord définir la connexion en tant que connexion à plusieurs bases de données. Cette fonctionnalité peut être activée dans le Portail Azure Portail Azure, avec des kits SDK de gestion C# ou Python, ou avec un modèle ARM. L’utilisateur, le groupe, le principal de service ou l’identité managée utilisé pour autoriser le routage de la base de données doit disposer au minimum du rôle Contributeur et d’autorisations d’écriture sur le cluster.
Pour spécifier une autre base de données, définissez la base de données de la propriété d’ingestion.
Avertissement
Spécifier une autre base de données sans définir la connexion en tant que connexion de données à plusieurs bases de données entraîne l’échec de l’ingestion.
Router les données d’événement vers une autre table
Pour spécifier une autre table pour chaque événement, définissez la Table, le Format, la Compression et le mappage des propriétés d’ingestion. La connexion route dynamiquement les données ingérées comme spécifié dans EventData.Properties, remplaçant les propriétés statiques pour cet événement.
L’exemple suivant montre comment définir les détails du hub d’événements et envoyer des données de métriques météorologiques à une autre base de données (MetricsDB) et à une autre table (WeatherMetrics). Les données sont au format JSON et mapping1 est prédéfini sur la table WeatherMetrics.
// This sample uses Azure.Messaging.EventHubs which is a .Net Framework library.
await using var producerClient = new EventHubProducerClient("<eventHubConnectionString>");
// Create the event and add optional "dynamic routing" properties
var eventData = new EventData(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(
new { TimeStamp = DateTime.UtcNow, MetricName = "Temperature", Value = 32 }
)));
eventData.Properties.Add("Database", "MetricsDB");
eventData.Properties.Add("Table", "WeatherMetrics");
eventData.Properties.Add("Format", "json");
eventData.Properties.Add("IngestionMappingReference", "mapping1");
eventData.Properties.Add("Tags", "['myDataTag']");
var events = new[] { eventData };
// Send events
await producerClient.SendAsync(events);
Mappage des propriétés système Event Hubs
Les propriétés système sont des champs définis par le service Event Hubs, au moment où l’événement est mis en file d’attente. La connexion de données Event Hubs d’Azuer Data Explorer peut incorporer un ensemble prédéfini de propriétés système dans les données ingérées dans une table en fonction d’un mappage donné.
Remarque
- L’incorporation des propriétés système est prise en charge pour les formats JSON et tabulaires (c’est-à-dire
JSON
,MultiJSON
,CSV
,TSV
,PSV
,SCsv
,SOHsv
,TSVE
). - Lorsque vous utilisez un format non pris en charge (par exemple, TXT ou des formats compressés comme
Parquet
,Avro
, etc.), les données sont quand même ingérées, mais les propriétés sont ignorées. - L’incorporation de propriétés système n’est pas prise en charge quand une compression de messages Event Hub est définie. Dans de tels scénarios, une erreur appropriée est émise et les données ne sont pas ingérées.
- Pour les données tabulaires, les propriétés système sont prises en charge uniquement pour les messages d’événements à enregistrement unique.
- Pour les données JSON, les propriétés système sont également prises en charge pour les messages d’événements à enregistrements multiples. Dans ce cas, les propriétés système sont ajoutées uniquement au premier enregistrement du message d’événement.
- Pour un mappage
CSV
, des propriétés sont ajoutées au début de l’enregistrement dans l'ordre indiqué lors de la création de la connexion de données. Ne vous fiez pas à l’ordre de ces propriétés, car elles peuvent changer à l’avenir. - Pour un mappage
JSON
, des propriétés sont ajoutées en fonction des noms de propriété dans la table Propriétés système.
Le service Event Hubs expose les propriétés système suivantes :
Propriété | Type de données | Description |
---|---|---|
x-opt-enqueued-time | datetime |
Heure UTC à laquelle l’événement a été mis en file d’attente |
x-opt-sequence-number | long |
Numéro de séquence logique de l’événement dans le flux de partition du hub d’événements |
x-opt-offset | string |
Décalage de l’événement par rapport au flux de partition du hub d’événements. L’identificateur de décalage est unique au sein d’une partition du flux du hub d’événements |
x-opt-publisher | string |
Nom de l’éditeur, si le message a été envoyé à un point de terminaison d’éditeur |
x-opt-partition-key | string |
Clé de partition de la partition correspondante qui a stocké l’événement |
Quand vous utilisez les hubs d’événements IoT Central, vous pouvez également incorporer les propriétés système IoT Hub dans la charge utile. Pour obtenir la liste complète, consultez Propriétés système d’IoT Hub.
Si vous avez sélectionné Propriétés du système d’événements dans la section Source de données de la table, vous devez inclure les propriétés dans le schéma et le mappage de table.
Exemples de mappage de schéma
Exemple de mappage de schéma de table
Si vos données comprennent trois colonnes (TimeStamp
, MetricName
et Value
) et que les propriétés que vous incluez sont x-opt-enqueued-time
et x-opt-offset
, créez ou modifiez le schéma de table à l’aide de la commande suivante :
.create-merge table TestTable (TimeStamp: datetime, MetricName: string, Value: int, EventHubEnqueuedTime:datetime, EventHubOffset:string)
Exemple de mappage CSV
Exécutez les commandes suivantes pour ajouter des données au début de l’enregistrement. Notez les valeurs ordinales.
.create table TestTable ingestion csv mapping "CsvMapping1"
'['
' { "column" : "TimeStamp", "Properties":{"Ordinal":"2"}},'
' { "column" : "MetricName", "Properties":{"Ordinal":"3"}},'
' { "column" : "Value", "Properties":{"Ordinal":"4"}},'
' { "column" : "EventHubEnqueuedTime", "Properties":{"Ordinal":"0"}},'
' { "column" : "EventHubOffset", "Properties":{"Ordinal":"1"}}'
']'
Exemple de mappage JSON
Les données sont ajoutées à l’aide du mappage des propriétés système. Exécutez les commandes suivantes :
.create table TestTable ingestion json mapping "JsonMapping1"
'['
' { "column" : "TimeStamp", "Properties":{"Path":"$.TimeStamp"}},'
' { "column" : "MetricName", "Properties":{"Path":"$.MetricName"}},'
' { "column" : "Value", "Properties":{"Path":"$.Value"}},'
' { "column" : "EventHubEnqueuedTime", "Properties":{"Path":"$.x-opt-enqueued-time"}},'
' { "column" : "EventHubOffset", "Properties":{"Path":"$.x-opt-offset"}}'
']'
Mise en correspondance du schéma pour les fichiers Event Hub Capture Avro
Une façon de consommer des données Event Hubs consiste à capturer des événements via Azure Event Hubs dans Stockage Blob Azure ou Azure Data Lake Storage. Vous pouvez ensuite ingérer les fichiers de capture au fur et à mesure qu’ils sont écrits à l’aide d’une connexion de données Event Grid dans Azure Data Explorer.
Le schéma des fichiers de capture est différent du schéma de l’événement d’origine envoyé à Event Hubs. Vous devez concevoir le schéma de table de destination en gardant à l’esprit cette différence. Plus précisément, la charge utile d’événement est représentée dans le fichier de capture en tant que tableau d’octets et ce tableau n’est pas décodé automatiquement par la connexion de données Azure Data Explorer Event Grid. Pour plus d’informations sur le schéma de fichier pour les données de capture Event Hubs Avro, consultez Exploration des fichiers Avro capturés dans Azure Event Hubs.
Pour décoder correctement la charge utile de l’événement :
- Mappez le champ
Body
de l’événement capturé à une colonne de typedynamic
dans la table de destination. - Appliquez une stratégie de mise à jour qui convertit le tableau d’octets en chaîne lisible à l’aide de la fonction unicode_codepoints_to_string().
Ingérer des propriétés personnalisées
Lors de l’ingestion d’événements provenant d’Event Hubs, les données sont extraites de la section body
de l’objet de données d’événement. Cependant, les propriétés personnalisées d’Event Hubs sont définies dans la section properties
de l’objet et ne sont pas ingérées. Pour ingérer des propriétés personnalisées, vous devez les incorporer dans les données de la section body
de l’objet.
L’exemple suivant compare l’objet de données d’événements contenant la propriété personnalisée customProperty
telle qu’elle est définie par Event Hubs (à gauche) à la propriété incorporée nécessaire pour l’ingestion (à droite).
{
"body":{
"value": 42
},
"properties":{
"customProperty": "123456789"
}
}
{
"body":{
"value": 42,
"customProperty": "123456789"
}
}
Vous pouvez utiliser une des méthodes suivantes pour incorporer des propriétés personnalisées dans les données, dans la section body
de l’objet de données d’événement :
- Dans Event Hubs, lors de la création de l’objet de données d’événement, incorporez les propriétés personnalisées dans les données, dans la section
body
de l’objet. - Utilisez Azure Stream Analytics pour traiter les événements du hub d’événements et incorporer les propriétés personnalisées dans les données d’événement. Dans Azure Stream Analytics, vous pouvez ingérer nativement les données en utilisant le connecteur de sortie Azure Data Explorer, ou router les données vers un autre hub d’événements puis, à partir de là, dans votre cluster.
- Utilisez Azure Functions pour ajouter les propriétés personnalisées, puis ingérez les données.
Créer des hubs d’événements
Créez un hub d’événements si vous n’en avez pas déjà un. La connexion au hub d’événements peut être gérée via le portail Azure, par programmation avec C# ou Python, ou avec le modèle Azure Resource Manager.
Remarque
- La possibilité d’ajouter dynamiquement des partitions après la création d’un hub d’événements est disponible uniquement avec les niveaux Event Hubs Premium et Dédié. Quand vous définissez le nombre de partitions, tenez compte de la mise à l’échelle à long terme.
- Le groupe de consommateurs doit être unique par consommateur. Créez un groupe de consommateurs dédié à la connexion Azure Data Explorer.
Connexion de données Event Hubs inter-régions
Pour optimiser les performances, créez le hub d’événements dans la même région que le cluster. Si ce n’est pas possible, envisagez d’utiliser des niveaux Premium ou Dédié Event Hubs. Pour obtenir une comparaison de niveaux, consultez Comparer les niveaux Azure Event Hubs.
Envoyer des événements
Consultez l’exemple d’application qui génère des données et les envoie à un hub d’événements.
Remarque
Pour permettre un traitement efficace des événements d’Event Hubs vers Azure Data Explorer, évitez une distribution déséquilibré des événements entre les partitions. Un mappage irrégulier peut entraîner une latence de découverte élevée. Pour plus d’informations, consultez Mappage d’événements aux partitions.
Configurer une solution de géo-reprise d’activité après sinistre
Event Hubs offre une solution de géoreprise d’activité après sinistre.
Azure Data Explorer ne prend pas en charge les espaces de noms de hub d’événements de type Alias
. Pour implémenter la géoreprise d’activité dans votre solution, créez deux connexions de données de hub d’événements : une pour l’espace de noms principal et une pour l’espace de noms secondaire. Azure Data Explorer écoute les deux connexions event Hub.
Remarque
Il est de la responsabilité de l’utilisateur d’implémenter un basculement entre l’espace de noms principal et l’espace de noms secondaire.
Contenu connexe
- Ingérer des données Event Hub dans Azure Data Explorer
- Créer une connexion de données de hub d’événements pour Azure Data Explorer en utilisant C#
- Créer une connexion de données de hub d’événements pour Azure Data Explorer en utilisant Python
- Créer une connexion de données de hub d’événements pour Azure Data Explorer en utilisant un modèle Azure Resource Manager
- Gérer les connexions de données Event Hubs dans votre cluster gratuit
- Ingérer et interroger des journaux Azure Monitor avec Azure Data Explorer