Compartilhar via


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. Especifique Compression 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:

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 tabela csv.
  • 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