Conexão de dados dos Hubs de Eventos (versão prévia)
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 Synapse 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 ao Azure Synapse 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 Synapse 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 são inseridos com as propriedades selecionadas de acordo com o mapeamento de 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 Synapse Data Explorer, confira Visão geral da ingestão de dados do Azure Synapse Data Explorer.
Formato de dados
Os dados são lidos nos Hubs de Eventos na forma de objetos EventData.
Confira Formatos com suporte.
Observação
O hub de eventos não é compatível com o formato .raw.
Os dados podem ser compactados usando o algoritmo de compactação
GZip
. EspecifiqueCompression
nas propriedades de ingestão.- Não há suporte para compactação de dados em formatos compactados (como Avro, Parquet e ORC).
- Não há suporte para codificação personalizada e propriedades do sistema inseridas em dados compactados.
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:
Propriedade | Descrição |
---|---|
Tabela | Nome (diferenciar 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. |
Observação
Somente os eventos enfileirados após a criação da conexão de dados são ingeridos.
Roteamento de eventos
Ao configurar uma conexão dos Hubs de Eventos com o cluster do Azure Synapse Data Explorer, você especifica as propriedades da tabela de destino (nome da tabela, formato dos dados, compactação e mapeamento). O roteamento padrão dos dados também é conhecido como static routing
.
Você também pode especificar as propriedades da tabela de destino para cada evento, usando as propriedades do evento. A conexão roteará os dados dinamicamente conforme especificado em EventData.Properties, substituindo as propriedades estáticas para esse evento.
No exemplo a seguir, defina os detalhes dos Hubs de Eventos e envie dados de métrica de clima à tabela WeatherMetrics
.
Os dados estão no formato json
. O mapping1
é predefinido na tabela WeatherMetrics
.
Aviso
Este exemplo usa autenticação por cadeia de conexão para se conectar aos Hubs de Eventos para simplificar o exemplo. No entanto, codificar uma cadeia de conexão no seu script requer um grau muito alto de confiança no aplicativo e acarreta riscos de segurança.
Para soluções seguras de longo prazo, use uma destas opções:
- Autenticação sem senha
- Armazenar sua cadeia de conexão em um Azure Key Vault e usar esse método para recuperá-la em seu código.
var eventHubNamespaceConnectionString=<connection_string>;
var eventHubName=<event_hub>;
// Create the data
var metric = new Metric { Timestamp = DateTime.UtcNow, MetricName = "Temperature", Value = 32 };
var data = JsonConvert.SerializeObject(metric);
// Create the event and add optional "dynamic routing" properties
var eventData = new EventData(Encoding.UTF8.GetBytes(data));
eventData.Properties.Add("Table", "WeatherMetrics");
eventData.Properties.Add("Format", "json");
eventData.Properties.Add("IngestionMappingReference", "mapping1");
eventData.Properties.Add("Tags", "['mydatatag']");
// Send events
var eventHubClient = EventHubClient.CreateFromConnectionString(eventHubNamespaceConnectionString, eventHubName);
eventHubClient.Send(eventData);
eventHubClient.Close();
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 dos Hubs de Eventos com o Azure Synapse Data Explorer vai inserir as propriedades selecionadas nos dados que chegam na tabela.
Observação
- As propriedades do sistema têm suporte para
json
e para formatos tabulares (csv
,tsv
etc.) e não têm suporte em dados compactados. Ao usar um formato sem suporte, os dados ainda serão ingeridos, mas as propriedades serão ignoradas. - 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 têm suporte para 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 mapeamento de
csv
, as propriedades são adicionadas no início do registro na ordem listada na tabelacsv
. - Para mapeamento de
json
, as propriedades são adicionadas de acordo com os nomes de propriedade na tabela Propriedades do sistema.
Propriedades do sistema
Os Hubs de Eventos expõem 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 | longo | O número de sequência lógica do evento no fluxo de partição dos Hubs de Eventos |
x-opt-offset | string | O deslocamento do evento em relação ao fluxo da partição dos Hubs de Eventos. O identificador de deslocamento é exclusivo em uma partição do fluxo dos Hubs 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 |
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"}}'
']'
Conexão dos Hubs de Eventos
Observação
Para obter o melhor desempenho, crie todos os recursos na mesma região que o cluster do Azure Synapse Data Explorer.
Criar um Hub de Eventos
Crie um Hub de Eventos, caso você ainda não tenha nenhum. A conexão com os Hubs 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 contagem de partições não é mutável, portanto você deve considerar 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 Synapse 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 Ingerir dados dos Hubs de Eventos no Azure Synapse Data Explorer
Configurar a solução de recuperação de desastre geográfico
Os Hubs de Eventos oferecem uma solução de recuperação de desastre geográfico.
O Azure Synapse Data Explorer não dá suporte a namespaces Alias
dos Hubs de Eventos. Para implementar a recuperação de desastre geográfico em sua solução, crie duas conexões de dados dos Hubs de Eventos: uma para o namespace primário e outra para o namespace secundário. O Azure Synapse Data Explorer escutará as duas conexões dos Hubs de Eventos.
Observação
É responsabilidade do usuário implementar um failover do namespace primário para o namespace secundário.
Próximas etapas
- Ingerir dados dos Hubs de Eventos no Data Explorer do Azure Synapse
- Criar uma conexão de dados dos Hubs de Eventos com o Azure Synapse Data Explorer usando C#
- Criar uma conexão de dados dos Hubs de Eventos com o Azure Synapse Data Explorer usando Python
- Criar uma conexão de dados dos Hubs de Eventos com o Azure Synapse Data Explorer usando o modelo do Azure Resource Manager