Conexão de dados dos Hubs de Eventos do Azure
Os Hubs de Eventos do Azure são uma plataforma de streaming de Big Data e um serviço de ingestão de eventos. O Azure Data Explorer oferece a ingestão contínua dos hubs de eventos gerenciados pelo cliente.
O pipeline de ingestão dos Hubs de Eventos transfere eventos para o Azure Data Explorer em várias etapas. Primeiro você cria um hub de eventos no portal do Azure. Depois, você cria uma tabela de destino no Azure Data Explorer na qual os dados em um formato específico serão ingeridos usando as propriedades de ingestãoespecificadas. A conexão dos Hubs de Eventos precisa saber qual é o roteamento de evento. Os dados podem ser inseridos com as propriedades selecionadas de acordo com as propriedades do sistema de eventos. Crie uma conexão com os Hubs de Eventos para criar um hub de eventos e enviar eventos. Esse processo pode ser gerenciado por meio do portal do Azure, programaticamente com o C#, o Python ou o modelo do Azure Resource Manager.
Para obter informações gerais sobre a ingestão de dados no Azure Data Explorer, confira Visão geral da ingestão de dados do Azure Data Explorer.
Mecanismos de autenticação de conexão de dados do Azure Data Explorer
- Conexão de dados baseada em identidade gerenciada (recomendado): usar uma conexão de dados baseada em identidade gerenciada é a maneira mais segura de se conectar a fontes de dados. Ela fornece controle total sobre a capacidade de buscar dados de uma fonte de dados.
A configuração de uma conexão de dados usando a identidade gerenciada requer as seguintes etapas:
- Adicione uma identidade gerenciada ao cluster.
- Conceda permissões à identidade gerenciada na fonte de dados.
- Defina uma política de identidade gerenciada nos bancos de dados de destino.
- Crie uma conexão de dados usando a autenticação de identidade gerenciada para buscar dados.
Cuidado
Se as permissões de identidade gerenciada forem removidas da fonte de dados, a conexão de dados será desabilitada e não poderá buscar dados da fonte de dados.
- Conexão de dados baseada em chave: se uma identidade gerenciada não for especificada na conexão de dados, a conexão assumirá automaticamente o padrão de autenticação baseada em chave. As conexões baseadas em chave buscam dados usando uma cadeia de conexão de recurso, como a cadeia de conexão dos Hubs de Eventos do Azure. O Azure Data Explorer gera a cadeia de conexão de recurso para o recurso especificado e a salva com segurança na conexão de dados. A cadeia de conexão é usada para buscar dados da fonte de dados.
Cuidado
Se houver rotação de chave, a conexão de dados será desabilitada e não poderá buscar dados da fonte de dados. Para corrigir o problema, atualize ou recrie a conexão de dados.
- Para que o MI possa buscar dados dos Hubs de Eventos do Azure, ele deve ter pelo menos um Receptor de Dados dos Hubs de Eventos do Azure.
Formato de dados
Os dados são lidos no hub de eventos na forma de objetos EventData.
Confira Formatos com suporte.
Observação
- A ingestão do Hub de Eventos não dá suporte ao formato RAW.
- Não há suporte para o Registro de Esquema do Hub de Eventos do Azure e o Avro sem esquema.
Os dados podem ser compactados usando o algoritmo de compactação
GZip
. Você pode especificar oCompression
dinamicamente usando asCompression
ou nas configurações de Conexão de Dados estáticos.Observação
Não há suporte para compactação de dados em formatos compactados (como Avro, Parquet, ORC, ApacheAvro e W3CLOGFILE). Não há suporte para codificação personalizada e propriedades do sistema inseridas em dados compactados.
Propriedades dos Hubs de Eventos
O Azure Data Explorer dá suporte às seguintes propriedades dos Hubs de Eventos:
- Um conjunto fechado de propriedades de ingestão, que ajuda a rotear o evento para a tabela relevante.
- Um conjunto fechado de propriedades do sistema de eventos, que pode ser inserido nos dados com base em um determinado mapeamento.
Observação
Não há suporte para a ingestão de propriedades personalizadas dos Hubs de Eventos, usadas para associar metadados a eventos. Se você precisar ingerir as propriedades personalizadas, envie-as no corpo dos dados do evento. Para obter mais informações, confira Ingerir propriedades personalizadas.
Propriedades da ingestão
As propriedades de ingestão informam ao processo de ingestão para onde os dados devem ser encaminhados e como eles devem ser processados. Você pode especificar as propriedades de ingestão da ingestão de eventos usando EventData.Properties. Defina as seguintes propriedades:
Observação
Os nomes de propriedade diferenciam maiúsculas de minúsculas.
Propriedade | Descrição |
---|---|
Banco de dados | O nome que diferencia maiúsculas de minúsculas do banco de dados de destino. Por padrão, os dados são ingeridos no banco de dados de destino associado à conexão de dados. Use esta propriedade para substituir o banco de dados padrão e enviar os dados para outro banco de dados. Para fazer isso, primeiro você precisa configurar a conexão como uma conexão de vários bancos de dados. |
Tabela | O nome que diferencia maiúsculas de minúsculas da tabela de destino existente. Substitui o conjunto Table no painel Data Connection . |
Formatar | Formato dos dados. Substitui o conjunto Data format no painel Data Connection . |
IngestionMappingReference | Nome do mapeamento de ingestão existente a ser usado. Substitui o conjunto Column mapping no painel Data Connection . |
Compactação | Compactação de dados None (padrão) ou compactação GZip . |
Codificação | Codificação de dados, o padrão é UTF8. Pode ser qualquer uma das codificações com suporte do .NET. |
Marcações | Uma lista de marcas a serem associadas aos dados ingeridos, formatadas como uma cadeia de caracteres JSON. Há implicações de desempenho ao usar marcas. |
RawHeaders | Indica que a origem do evento é Kafka e Data Explorer do Azure deve usar a desserialização de matriz de bytes para ler outras propriedades de roteamento. Seu valor é ignorado. |
Observação
Somente os eventos enfileirados após a criação da conexão de dados são ingeridos.
Roteamento de eventos
Ao criar uma conexão de dados com o cluster, você pode especificar o roteamento para o qual enviar os dados ingeridos. O roteamento padrão é definido para a tabela de destino especificada na cadeia de conexão associada ao banco de dados de destino. O roteamento padrão dos dados também é conhecido como roteamento estático. Você pode especificar um roteamento alternativo para seus dados definindo as propriedades de dados de evento mencionadas acima.
Rotear dados de evento para um banco de dados alternativo
O roteamento de dados para um banco de dados alternativo está desativado por padrão. Para enviar os dados para um banco de dados diferente, você precisa primeiro definir a conexão como uma conexão de vários bancos de dados. Você pode fazer isso no portal do Azure, no C#, no Python ou em um modelo do ARM. O usuário, o grupo, a entidade de serviço ou a identidade gerenciada usada para permitir o roteamento de banco de dados precisa, pelo menos, ter a função de colaborador e permissões de gravação no cluster.
Para especificar um banco de dados alternativo, defina a propriedade de ingestãoDatabase.
Aviso
Especificar um banco de dados alternativo sem definir uma conexão de dados de vários bancos de dados causará uma falha na ingestão.
Rotear dados de evento para uma tabela alternativa
Para especificar uma tabela alternativa para cada evento, defina as propriedades de ingestãoTable, Format, Compression e de mapeamento. A conexão roteará os dados ingeridos dinamicamente conforme especificado em EventData.Properties, substituindo as propriedades estáticas para esse evento.
O exemplo a seguir mostra como definir os detalhes do hub de eventos e enviar dados de métrica de clima para o banco de dados alternativo (MetricsDB) e a tabela (WeatherMetrics). Os dados estão no formato JSON e mapping1 está predefinido na tabela 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);
Mapeamento de propriedades do sistema de eventos
As propriedades do sistema armazenam propriedades que são definidas pelo Hubs de Eventos, no momento em que o evento é colocado na fila. A conexão de dados com o hub de eventos pode inserir um conjunto selecionado de propriedades do sistema nos dados ingeridos em uma tabela com base em um determinado mapeamento.
Observação
- Há suporte para a inserção de propriedades do sistema para formatos JSON e tabular (ou seja,
JSON
,MultiJSON
,CSV
,TSV
,PSV
,SCsv
,SOHsv
,TSVE
). - Ainda que você use um formato sem suporte (ou seja, TXT ou formatos compactados como
Parquet
,Avro
etc.), os dados serão ingeridos, mas as propriedades serão ignoradas. - Não há suporte para a inserção de propriedades do sistema quando uma compactação das mensagens do Hub de Eventos está definida. Nesses cenários, um erro apropriado será emitido e os dados não serão ingeridos.
- Para dados tabulares, as propriedades do sistema têm suporte apenas para mensagens de evento de registro único.
- Para dados JSON, as propriedades do sistema também são compatíveis com mensagens de evento de vários registros. Nesses casos, as propriedades do sistema são adicionadas somente ao primeiro registro da mensagem de evento.
- Para
CSV
mapeamento, as propriedades são adicionadas no início do registro na ordem listada na criação da conexão de dados. Não confie na ordem dessas propriedades, pois elas podem ser alteradas no futuro. - Para mapeamento de
JSON
, as propriedades são adicionadas de acordo com os nomes de propriedade na tabelaJSON
.
O serviço dos Hubs de Eventos expõe as seguintes propriedades do sistema:
Propriedade | Tipo de Dados | Descrição |
---|---|---|
x-opt-enqueued-time | datetime |
Hora UTC em que o evento foi colocado na fila |
x-opt-sequence-number | long |
O número de sequência lógica do evento no fluxo de partição do hub de eventos |
x-opt-offset | string |
O deslocamento do evento em relação ao fluxo da partição do hub de eventos. O identificador de deslocamento é exclusivo em uma partição do fluxo do hub de eventos |
x-opt-publisher | string |
O nome do editor, se a mensagem foi enviada a um ponto de extremidade de editor |
x-opt-partition-key | string |
A chave da partição correspondente que armazenou o evento |
Ao trabalhar com hubs de eventos do IoT Central, você também pode inserir as propriedades do sistema do Hub IoT no conteúdo. Para ver a lista completa, confira Propriedades do sistema do Hub IoT.
Se você selecionou Propriedades do sistema de eventos na seção Fonte de dados da tabela, inclua as propriedades no esquema e no mapeamento da tabela.
Exemplos de mapeamento de esquema
Exemplo de mapeamento de esquema
Se os dados incluírem três colunas (Timespan
, Metric
e Value
) e as propriedades que você incluir forem x-opt-enqueued-time
e x-opt-offset
, crie ou altere o esquema de tabela usando este comando:
.create-merge table TestTable (TimeStamp: datetime, Metric: string, Value: int, EventHubEnqueuedTime:datetime, EventHubOffset:string)
Exemplo de mapeamento de CSV
Execute os comandos a seguir para adicionar dados ao início do registro. Observe os valores ordinais.
.create table TestTable ingestion csv mapping "CsvMapping1"
'['
' { "column" : "Timespan", "Properties":{"Ordinal":"2"}},'
' { "column" : "Metric", "Properties":{"Ordinal":"3"}},'
' { "column" : "Value", "Properties":{"Ordinal":"4"}},'
' { "column" : "EventHubEnqueuedTime", "Properties":{"Ordinal":"0"}},'
' { "column" : "EventHubOffset", "Properties":{"Ordinal":"1"}}'
']'
Exemplo de mapeamento JSON
Os dados são adicionados usando o mapeamento de propriedades do sistema. Execute estes comandos:
.create table TestTable ingestion json mapping "JsonMapping1"
'['
' { "column" : "Timespan", "Properties":{"Path":"$.timestamp"}},'
' { "column" : "Metric", "Properties":{"Path":"$.metric"}},'
' { "column" : "Value", "Properties":{"Path":"$.value"}},'
' { "column" : "EventHubEnqueuedTime", "Properties":{"Path":"$.x-opt-enqueued-time"}},'
' { "column" : "EventHubOffset", "Properties":{"Path":"$.x-opt-offset"}}'
']'
Mapeamento de esquema para arquivos Avro de Captura do Hub de Eventos
Uma forma de consumir dados do Hub de Eventos é capturar eventos por meio de Hubs de Eventos do Azure no Armazenamento de Blobs do Azure ou no Azure Data Lake Storage. Você pode então ingerir os arquivos de captura conforme eles são gravados usando uma Conexão de Dados da Grade de Eventos no Azure Data Explorer.
O esquema dos arquivos de captura é diferente do esquema do evento original enviado ao Hub de Eventos. Você deve projetar o esquema da tabela de destino com essa diferença em mente. Especificamente, o conteúdo do evento é representado no arquivo de captura como uma matriz de bytes, e essa matriz não é decodificada automaticamente pela conexão de dados do Azure Data Explorer da Grade de Eventos. Para obter informações mais específicas sobre o esquema de arquivos para dados de captura do Avro do Hub de Eventos, confira Explorar arquivos Avro capturados em Hubs de Eventos do Azure.
Para decodificar corretamente o conteúdo do evento:
- Mapeie o campo
Body
do evento capturado em uma coluna de tipodynamic
na tabela de destino. - Aplique uma política de atualização que converte a matriz de bytes em uma cadeia de caracteres legível usando a função unicode_codepoints_to_string( ).
Ingerir propriedades personalizadas
Ao ingerir eventos dos Hubs de Eventos, os dados são retirados da seção body
do objeto de dados do evento. No entanto, as propriedades personalizadas dos Hubs de Eventos são definidas na seção properties
do objeto e não são ingeridas. Para ingerir as propriedades do cliente, você precisa inseri-las nos dados na seção body
do objeto.
O exemplo a seguir compara o objeto de dados de eventos que contém a propriedade personalizada customProperty
, conforme definido pelos Hubs de Eventos (à esquerda), com a propriedade inserida necessária para ingestão (direita).
{
"body":{
"value": 42
},
"properties":{
"customProperty": "123456789"
}
}
{
"body":{
"value": 42,
"customProperty": "123456789"
}
}
Você pode usar um dos seguintes métodos para inserir propriedades personalizadas nos dados na seção body
do objeto de dados de evento:
- Nos Hubs de Eventos, ao criar o objeto de dados de evento, insira as propriedades personalizadas como parte dos dados na seção
body
do objeto. - Use o Azure Stream Analytics para processar eventos do hub de eventos e inserir as propriedades personalizadas nos dados do evento. No Azure Stream Analytics, você pode ingerir os dados nativamente usando o conector de saída do Azure Data Explorer ou roteá-los para outro hub de eventos e de lá para o cluster.
- Use o Azure Functions para adicionar as propriedades personalizadas e ingerir os dados.
Conexão de dados do Hub de Eventos entre regiões
Para obter o melhor desempenho, crie todos os recursos a seguir na mesma região que o cluster. Se não houver outra alternativa, considere usar as camadas Premium ou Hub de Eventos Dedicado . A comparação de camadas do Hub de Eventos pode ser encontrada aqui.
Criar um hub de eventos
Crie um hub de eventos, caso você ainda não tenha nenhum. A conexão com o hub de eventos pode ser gerenciada usando o portal do Azure, programaticamente com C# ou Python ou por meio do modelo do Azure Resource Manager.
Observação
- A capacidade de adicionar partições dinamicamente após a criação de um hub de eventos só está disponível com as camadas Premium e Dedicado dos Hubs de Eventos. Considere a escala de longo prazo ao definir a contagem de partições.
- O grupo de consumidores precisa ser exclusivo por consumidor. Crie um grupo de consumidores dedicado para a conexão do Azure Data Explorer.
Enviar eventos
Confira o aplicativo de exemplo que gera dados e os envia para um hub de eventos.
Para ver um exemplo de como gerar dados de exemplo, confira Ingestão de dados do hub de eventos no Azure Data Explorer
Configurar a solução de recuperação de desastre geográfico
O hub de eventos oferece uma solução de Recuperação de desastre geográfico.
O Azure Data Explorer não dá suporte a namespaces Alias
de hub de eventos. Para implementar a recuperação de desastre geográfico em sua solução, crie duas conexões de dados de hub de eventos: uma para o namespace primário e outra para o namespace secundário. O Azure Data Explorer escutará as duas conexões de hub de eventos.
Observação
É responsabilidade do usuário implementar um failover do namespace primário para o namespace secundário.
Conteúdo relacionado
- Ingerir dados do hub de eventos no Azure Data Explorer
- Criar uma conexão de dados de hub de eventos com o Azure Data Explorer usando C#
- Criar uma conexão de dados de hub de eventos com o Azure Data Explorer usando Python
- Criar uma conexão de dados de hub de eventos com o Azure Data Explorer usando um modelo do Azure Resource Manager
- Gerenciar conexões de dados dos Hubs de Eventos no cluster gratuito
- Ingerir e consultar logs do Azure Monitor com o Azure Data Explorer
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de