Recursos e terminologia em Hubs de Eventos do AzureFeatures and terminology in Azure Event Hubs

Os Hubs de Evento do Azure é um serviço de processamento de evento escalonável que recebe e processa grandes volumes de eventos e dados, com baixa latência e alta confiabilidade.Azure Event Hubs is a scalable event processing service that ingests and processes large volumes of events and data, with low latency and high reliability. Confira O que são Hubs de Eventos? para obter uma visão geral de alto nível.See What is Event Hubs? for a high-level overview.

Este artigo se baseia nas informações do artigo de visão geral e fornece detalhes técnicos e de implementação sobre recursos e componentes dos Hubs de Eventos.This article builds on the information in the overview article, and provides technical and implementation details about Event Hubs components and features.

Dica

O suporte de protocolo para clientes Apache Kafka (versões >= 1,0) fornece pontos de extremidade de rede que habilitam aplicativos criados para usar Apache Kafka com qualquer cliente para usar os hubs de eventos.The protocol support for Apache Kafka clients (versions >=1.0) provides network endpoints that enable applications built to use Apache Kafka with any client to use Event Hubs. A maioria dos aplicativos Kafka existentes pode simplesmente ser reconfigurada para apontar para um namespace de Hub de eventos em vez de um servidor de inicialização de cluster Kafka.Most existing Kafka applications can simply be reconfigured to point to an Event Hub namespace instead of a Kafka cluster bootstrap server.

Da perspectiva do custo, do esforço operacional e da confiabilidade, os hubs de eventos do Azure são uma ótima alternativa para implantar e operar seus próprios clusters Kafka e Zookeeper e para ofertas Kafka como serviço não nativas para o Azure.From the perspective of cost, operational effort, and reliability, Azure Event Hubs is a great alternative to deploying and operating your own Kafka and Zookeeper clusters and to Kafka-as-a-Service offerings not native to Azure.

Além de obter a mesma funcionalidade básica do agente de Apache Kafka, você também obtém acesso aos recursos do hub de eventos do Azure, como o envio em lote automático e o arquivamento via captura de hubs de eventos, dimensionamento automático e balanceamento, recuperação de desastres, suporte a zona de disponibilidade neutra de custo, integração de rede flexível e segura e suporte a vários protocolos, incluindo o protocolo AMQP-overIn addition to getting the same core functionality as of the Apache Kafka broker, you also get access to Azure Event Hub features like automatic batching and archiving via Event Hubs Capture, automatic scaling and balancing, disaster recovery, cost-neutral availability zone support, flexible and secure network integration, and multi-protocol support including the firewall-friendly AMQP-over-WebSockets protocol.

NamespaceNamespace

Um namespace de hubs de eventos fornece pontos de extremidade de rede integrada de DNS e uma variedade de recursos de gerenciamento de integração de rede e controle de acesso, como filtragem de IP, ponto de extremidade de serviço de rede virtuale link privado e é o contêiner de gerenciamento para uma das várias instâncias de Hub de eventos (ou tópicos, na linguagem Kafka).An Event Hubs namespace provides DNS integrated network endpoints and a range of access control and network integration management features such as IP filtering, virtual network service endpoint, and Private Link and is the management container for one of multiple Event Hub instances (or topics, in Kafka parlance).

Editores de eventosEvent publishers

Qualquer entidade que envia dados para um hub de eventos é um Editor de eventos (como sinônimos usado com o produtor de eventos).Any entity that sends data to an Event Hub is an event publisher (synonymously used with event producer). Os editores de eventos podem publicar eventos usando HTTPS ou AMQP 1,0 ou o protocolo Kafka.Event publishers can publish events using HTTPS or AMQP 1.0 or the Kafka protocol. Os editores de eventos usam a autorização baseada em Azure Active Directory com tokens JWT emitidos por OAuth2 ou um token SAS (assinatura de acesso compartilhado) específico ao Hub de eventos.Event publishers use Azure Active Directory based authorization with OAuth2-issued JWT tokens or an Event Hub-specific Shared Access Signature (SAS) token gain publishing access.

Publicar um eventoPublishing an event

Você pode publicar um evento via AMQP 1,0, o protocolo Kafka ou HTTPS.You can publish an event via AMQP 1.0, the Kafka protocol, or HTTPS. O serviço de hubs de eventos fornece a API REST e as bibliotecas de cliente .net, Java, Python, JavaScripte go para publicar eventos em um hub de eventos.The Event Hubs service provides REST API and .NET, Java, Python, JavaScript, and Go client libraries for publishing events to an event hub. Para outras plataformas e runtimes, você pode usar qualquer cliente AMQP 1.0, como o Apache Qpid.For other runtimes and platforms, you can use any AMQP 1.0 client, such as Apache Qpid.

A opção de usar AMQP ou HTTPS é específica para o cenário de uso.The choice to use AMQP or HTTPS is specific to the usage scenario. O AMQP requer o estabelecimento de um soquete bidirecional persistente, além do TLS (segurança de nível de transporte) ou SSL/TLS.AMQP requires the establishment of a persistent bidirectional socket in addition to transport level security (TLS) or SSL/TLS. O AMQP tem custos de rede mais altos ao inicializar a sessão; no entanto, o HTTPS requer sobrecarga adicional de TLS para cada solicitação.AMQP has higher network costs when initializing the session, however HTTPS requires additional TLS overhead for every request. O AMQP tem um desempenho significativamente maior para editores frequentes e pode atingir latências muito menores quando usado com código de publicação assíncrono.AMQP has significantly higher performance for frequent publishers and can achieve much lower latencies when used with asynchronous publishing code.

Você pode publicar eventos individualmente ou em lote.You can publish events individually or batched. Uma única publicação tem um limite de 1 MB, independentemente de ser um único evento ou um lote.A single publication has a limit of 1 MB, regardless of whether it is a single event or a batch. A publicação de eventos maiores que esse limite será rejeitada.Publishing events larger than this threshold will be rejected.

A taxa de transferência dos hubs de eventos é dimensionada usando partições e alocações de unidades de produtividade (veja abaixo).Event Hubs throughput is scaled by using partitions and throughput-unit allocations (see below). É uma prática recomendada para os editores permanecerem cientes do modelo de particionamento específico escolhido para um hub de eventos e especificar apenas uma chave de partição que seja usada para atribuir eventos relacionados de forma consistente à mesma partição.It is a best practice for publishers to remain unaware of the specific partitioning model chosen for an Event Hub and to only specify a partition key that is used to consistently assign related events to the same partition.

Chaves de partição

Os hubs de eventos garantem que todos os eventos que compartilham um valor de chave de partição sejam armazenados juntos e entregues em ordem de chegada.Event Hubs ensures that all events sharing a partition key value are stored together and delivered in order of arrival. Se forem usadas chaves de partição com políticas de editor, a identidade do editor e o valor da chave de partição devem corresponder.If partition keys are used with publisher policies, then the identity of the publisher and the value of the partition key must match. Caso contrário, ocorrerá um erro.Otherwise, an error occurs.

Retenção de eventosEvent Retention

Os eventos publicados são removidos de um hub de eventos com base em uma política de retenção com base em tempo configurável.Published events are removed from an Event Hub based on a configurable, timed-based retention policy. O valor padrão e o período de retenção mais curto possível é 1 dia (24 horas).The default value and shortest possible retention period is 1 day (24 hours). Para os hubs de eventos Standard, o período de retenção máximo é de 7 dias.For Event Hubs Standard, the maximum retention period is 7 days. Por Hubs de Eventos Dedicados, o período de retenção máximo é de 90 dias.For Event Hubs Dedicated, the maximum retention period is 90 days.

Observação

Os hubs de eventos são um mecanismo de fluxo de eventos em tempo real e não são projetados para serem usados em vez de um banco de dados e/ou como um armazenamento permanente para fluxos de eventos infinitamente mantidos.Event Hubs is a real-time event stream engine and is not designed to be used instead of a database and/or as a permanent store for infinitely held event streams.

Quanto mais profunda for o histórico de um fluxo de eventos, mais você precisará de índices auxiliares para encontrar uma determinada fatia histórica de um determinado fluxo.The deeper the history of an event stream gets, the more you will need auxiliary indexes to find a particular historical slice of a given stream. A inspeção de cargas de eventos e a indexação não estão dentro do escopo do recurso dos hubs de eventos (ou Apache Kafka).Inspection of event payloads and indexing are not within the feature scope of Event Hubs (or Apache Kafka). Bancos de dados e repositórios e mecanismos de análise especializados, como Azure data Lake Store, Azure data Lake Analytics e Synapse do Azure , são, portanto, muito mais adequados para armazenar eventos históricos.Databases and specialized analytics stores and engines such as Azure Data Lake Store, Azure Data Lake Analytics and Azure Synapse are therefore far better suited for storing historic events.

A captura de hubs de eventos integra-se diretamente com o armazenamento de BLOBs do azure e Azure data Lake Storage e, por meio dessa integração, também permite o fluxo de eventos diretamente no Azure Synapse.Event Hubs Capture integrates directly with Azure Blob Storage and Azure Data Lake Storage and, through that integration, also enables flowing events directly into Azure Synapse.

Se você quiser usar o padrão de fornecimento do evento para seu aplicativo, você deve alinhar sua estratégia de instantâneo com os limites de retenção dos hubs de eventos.If you want to use the Event Sourcing pattern for your application, you should align your snapshot strategy with the retention limits of Event Hubs. Não se desempenhe para recompilar exibições materializadas de eventos brutos a partir do início do tempo.Do not aim to rebuild materialized views from raw events starting at the beginning of time. Com certeza, você teria de alterar essa estratégia depois que seu aplicativo estiver em produção por um tempo e estiver bem utilizado, e seu construtor de projeção precisará fazer a variação por anos de eventos de alteração ao tentar obter as alterações mais recentes e em andamento.You would surely come to regret such a strategy once your application is in production for a while and is well used, and your projection builder has to churn through years of change events while trying to catch up to the latest and ongoing changes.

Política de editorPublisher policy

Os Hubs de Eventos permitem um controle granular sobre os editores de eventos por meio de políticas do editor.Event Hubs enables granular control over event publishers through publisher policies. As políticas do editor são recursos de tempo de execução criado para facilitar um grande número de editores de eventos independentes.Publisher policies are run-time features designed to facilitate large numbers of independent event publishers. Com as políticas do editor, cada editor usa seu próprio identificador exclusivo ao publicar eventos em um hub de eventos usando o mecanismo a seguir:With publisher policies, each publisher uses its own unique identifier when publishing events to an event hub, using the following mechanism:

//<my namespace>.servicebus.windows.net/<event hub name>/publishers/<my publisher name>

Você não precisa criar nomes de editor com antecedência, mas eles devem coincidir com o token SAS usado ao publicar um evento, para garantir identidades de editores independentes.You don't have to create publisher names ahead of time, but they must match the SAS token used when publishing an event, in order to ensure independent publisher identities. Ao usar as políticas do publicador, o valor PartitionKey é definido como o nome do publicador.When using publisher policies, the PartitionKey value is set to the publisher name. Para funcionar adequadamente, esses valores devem corresponder.To work properly, these values must match.

CapturaCapture

A Captura dos Hubs de Eventos permite que você capture automaticamente os dados de streaming em Hubs de Eventos e salve-os em uma conta de armazenamento de blobs ou em uma conta de serviço do Azure Data Lake de sua escolha.Event Hubs Capture enables you to automatically capture the streaming data in Event Hubs and save it to your choice of either a Blob storage account, or an Azure Data Lake Service account. Você pode habilitar a Captura do Portal do Azure e especificar um tamanho mínimo e a janela de tempo para executar a captura.You can enable Capture from the Azure portal, and specify a minimum size and time window to perform the capture. A Captura de Hubs de Eventos permite que você especifique sua própria conta de Armazenamento de Blobs do Azure e o contêiner, ou conta de serviço do Azure Data Lake, uma das quais será usada para armazenar os dados capturados.Using Event Hubs Capture, you specify your own Azure Blob Storage account and container, or Azure Data Lake Service account, one of which is used to store the captured data. Os dados capturados são gravados no formato Apache Avro.Captured data is written in the Apache Avro format.

PartiçõesPartitions

O Hub de Eventos organiza as sequências de eventos em uma ou mais partições.Event Hub organizes sequences of events into one or more partitions. À medida que novos eventos chegam, eles são adicionados ao final dessa sequência.As newer events arrive, they're added to the end of this sequence. Uma partição pode ser pensada como "log de confirmação".A partition can be thought of as a "commit log."

As partições bloqueiam os dados de evento que contêm o corpo do evento, um recipiente de propriedades definido pelo usuário que descreve o evento e os metadados como o deslocamento na partição, o número na sequência de fluxo dela e o carimbo de data/hora do lado do serviço no qual ele foi aceito.Partitions hold event data containing the body of the event, a user-defined property bag describing the event, and metadata such as its offset in the partition, its number in the stream sequence, and the service-side timestamp at which it was accepted.

Diagrama que exibe a sequência de eventos mais antigos para os mais recentes.

Os Hubs de Eventos são projetados para ajudar no processamento de grandes volumes de eventos, e o particionamento ajuda com isso de duas maneiras:Event Hubs is designed to help with processing of large volumes of events, and partitioning helps with that in two ways:

Primeiro, embora os Hubs de Eventos sejam um serviço de PaaS, há uma realidade física por baixo, e a manutenção de um log que preserva a ordem dos eventos exige que esses eventos sejam mantidos juntos no armazenamento subjacente e suas réplicas e que resultem em um teto de taxa de transferência para tal log.First, even though Event Hubs is a PaaS service, there's a physical reality underneath, and maintaining a log that preserves the order of events requires that these events are being kept together in the underlying storage and its replicas and that results in a throughput ceiling for such a log. O particionamento permite que vários logs paralelos sejam usados para o mesmo Hub de Eventos e, portanto, multiplique a capacidade de taxa de transferência de E/S bruta disponível.Partitioning allows for multiple parallel logs to be used for the same Event Hub and therefore multiplying the available raw IO throughput capacity.

Em segundo lugar, seus próprios aplicativos devem ser capazes de acompanhar o processamento do volume de eventos que estão sendo enviados para um Hub de Eventos.Second, your own applications must be able to keep up with processing the volume of events that are being sent into an Event Hub. Isso pode ser complexo e exige uma capacidade substancial, de expansão e de processamento paralelo.It may be complex and requires substantial, scaled-out, parallel processing capacity. A lógica para partições é a mesma acima: A capacidade de um único processo de lidar com eventos é limitada e, portanto, você precisa de vários processos, e as partições são como sua solução alimenta esses processos e, ainda assim, garantem que cada evento tenha um proprietário de processamento claro.The rationale for partitions is the same as above: The capacity of a single process to handle events is limited, and therefore you need several processes, and partitions are how your solution feeds those processes and yet ensures that each event has a clear processing owner.

Os Hubs de Eventos mantêm os eventos por um período de retenção configurado que se aplica a todas as partições.Event Hubs retains events for a configured retention time that applies across all partitions. Os eventos são removidos automaticamente quando o período de retenção é atingido.Events are automatically removed when the retention period has been reached. Se você especificar um período de retenção de um dia, o evento ficará indisponível exatamente 24 horas depois de ser aceito.If you specify a retention period of one day, the event will become unavailable exactly 24 hours after it has been accepted. Não é possível excluir eventos explicitamente.You cannot explicitly delete events.

O tempo de retenção permitido é de até sete dias para os Hubs de Eventos Standard e até 90 dias para Hubs de Eventos Dedicados.The allowed retention time is up to 7 days for Event Hubs Standard and up to 90 days for Event Hubs Dedicated. Se você precisar arquivar eventos além do período de retenção permitido, é possível tê-los armazenados automaticamente no Armazenamento do Azure ou Azure Data Lake ativando o recurso de Captura dos Hubs de Eventos e, se precisar pesquisar ou analisar esses arquivos detalhados, é possível importá-los facilmente para o Azure Synapse ou outras lojas semelhantes e plataformas de análise.If you need to archive events beyond the allowed retention period, you can have them automatically stored in Azure Storage or Azure Data Lake by turning on the Event Hubs Capture feature, and if you need to search or analyze such deep archives, you can easily import them into Azure Synapse or other similar stores and analytics platforms.

O motivo para o limite dos Hubs de Eventos na retenção de dados com base no tempo é evitar que grandes volumes de dados históricos do cliente sejam interceptados em um repositório profundo que está indexado apenas por um carimbo de data/hora e que permita acesso sequencial.The reason for Event Hubs' limit on data retention based on time is to prevent large volumes of historic customer data getting trapped in a deep store that is only indexed by a timestamp and only allows for sequential access. A filosofia arquitetônica aqui é que os dados históricos precisam de indexação mais avançada e mais acesso direto do que a interface de eventos em tempo real que os Hubs de Eventos ou Kafka fornecem.The architectural philosophy here is that historic data needs richer indexing and more direct access than the real-time eventing interface that Event Hubs or Kafka provide. Os mecanismos de fluxo de eventos não são adequados para desempenhar a função de data lakes ou arquivos de longo prazo para fornecimento de eventos.Event stream engines are not well suited to play the role of data lakes or long-term archives for event sourcing.

Como as partições são independentes e contêm sua própria sequência de dados, elas geralmente crescem a taxas diferentes.Because partitions are independent and contain their own sequence of data, they often grow at different rates. Nos Hubs de Eventos, isso não é uma preocupação que exige intervenção administrativa como seriam, por exemplo, no Apache Kafka, mas a distribuição desigual levará a um carregamento desigual nos processadores de eventos downstream.In Event Hubs, that is no concern that requires administrative intervention as it would be, for instance, in Apache Kafka, but uneven distribution will lead to uneven load on your downstream event processors.

Hubs de Eventos

O número de partições é especificado na criação e precisa estar entre 1 e 32 nos Hubs de Eventos Standard.The number of partitions is specified at creation and must be between 1 and 32 in Event Hubs Standard. A contagem de partições pode ter até 2.000 partições por unidade de capacidade em Hubs de Eventos Dedicados.The partition count can be up to 2000 partitions per Capacity Unit in Event Hubs Dedicated.

Recomendamos que você escolha pelo menos tantas partições quanto espera exigir nas TU (unidades de produtividade) sustentadas durante o pico de carga do seu aplicativo para aquele Hub de Eventos em particular.We recommend that you choose at least as many partitions as you expect to require in sustained throughput units (TU) during the peak load of your application for that particular Event Hub. É recomendável calcular com uma única partição que tem uma capacidade de taxa de transferência de 1 TU (1 MByte de entrada, 2 MByte de saída).You should calculate with a single partition having a throughput capacity of 1 TU (1 MByte in, 2 MByte out). É possível escalar as TUs no seu namespace ou nas unidades de capacidade do seu cluster independentemente da contagem de partições.You can scale the TUs on your namespace or the capacity units of your cluster independent of the partition count. Um Hub de Eventos com 32 partições ou um Hub de Eventos com uma partição incorre exatamente no mesmo custo quando o namespace é definido como capacidade de 1 TU.An Event Hub with 32 partitions or an Event Hub with 1 partition incur the exact same cost when the namespace is set to 1 TU capacity.

Os aplicativos controlam o mapeamento de eventos para partições de uma das três maneiras:Applications control the mapping of events to partitions in one of three ways:

  • Especificando a chave de partição, que é mapeada consistentemente (usando uma função de hash) para uma das partições disponíveis.By specifying partition key, which is consistently mapped (using a hash function) to one of the available partitions.
  • Não especificando uma chave de partição, que permite ao agente escolher aleatoriamente uma partição para um determinado evento.By not specifying a partition key, which enables to broker to randomly choose a partition for a given event.
  • Enviando eventos explicitamente para uma partição específica.By explicitly sending events to a specific partition.

A especificação de uma chave de partição permite manter eventos relacionados juntos na mesma partição e na ordem exata em que eles foram enviados.Specifying a partition key enables keeping related events together in the same partition and in the exact order in which they were sent. A chave de partição é uma cadeia de caracteres derivada do contexto do aplicativo e identifica a relação entre os eventos.The partition key is some string that is derived from your application context and identifies the interrelationship of the events.

Uma sequência de eventos identificados por uma chave de partição é um fluxo.A sequence of events identified by a partition key is a stream. Uma partição é um repositório de logs multiplexado para muitos desses fluxos.A partition is a multiplexed log store for many such streams.

A contagem de partições de um hub de eventos em um cluster de Hubs de Eventos dedicados pode ser aumentada após o hub de eventos ter sido criado, mas a distribuição de fluxos entre partições será alterada quando for feita como o mapeamento de chaves de partição para alterações de partições. Portanto, você deve tentar evitar essas alterações se a ordem relativa dos eventos é importante em seu aplicativo.The partition count for an event hub in a dedicated Event Hubs cluster can be increased after the event hub has been created, but the distribution of streams across partitions will change when it's done as the mapping of partition keys to partitions changes, so you should try hard to avoid such changes if the relative order of events matters in your application.

Definir o número de partições com o valor máximo permitido é tentador, mas sempre tenha em mente que os fluxos de eventos precisam ser estruturados de um jeito que você possa tirar proveito de várias partições.Setting the number of partitions to the maximum permitted value is tempting, but always keep in mind that your event streams need to be structured such that you can indeed take advantage of multiple partitions. Se você precisar de preservação de ordem absoluta em todos os eventos ou apenas em alguns subfluxos, talvez não seja possível tirar proveito de muitas partições.If you need absolute order preservation across all events or only a handful of substreams, you may not be able to take advantage of many partitions. Além disso, muitas partições tornam o lado de processamento mais complexo.Also, many partitions make the processing side more complex.

Embora as partições possam ser enviadas diretamente, isso não é recomendado.While partitions can be sent to directly, it's not recommended. Em vez disso, será possível usar os constructos de nível superior apresentados na seção Editores de eventos.Instead, you can use higher level constructs introduced in the Event publishers section.

Para saber mais sobre partições e a compensação entre disponibilidade e confiabilidade, consulte os artigos Guia de programação dos Hubs de Eventos e Disponibilidade e consistência em Hubs de Eventos.For more information about partitions and the trade-off between availability and reliability, see the Event Hubs programming guide and the Availability and consistency in Event Hubs article.

Tokens SASSAS tokens

Os hubs de eventos usam assinaturas de acesso compartilhado, que estão disponíveis no namespace e no nível do hub de eventos.Event Hubs uses Shared Access Signatures, which are available at the namespace and event hub level. Um token SAS é gerado a partir de uma chave de SAS e é um hash SHA de uma URL, codificado em um formato específico.A SAS token is generated from a SAS key and is an SHA hash of a URL, encoded in a specific format. Usando o nome da chave (política) e o token, os Hubs de Evento podem regenerar o hash e, portanto, autenticar o remetente.Using the name of the key (policy) and the token, Event Hubs can regenerate the hash and thus authenticate the sender. Normalmente, os tokens SAS para editores de eventos são criados apenas com privilégios de envio em um hub de eventos específico.Normally, SAS tokens for event publishers are created with only send privileges on a specific event hub. Esse mecanismo de URL de token SAS é a base para a identificação de editor abordada na política do editor.This SAS token URL mechanism is the basis for publisher identification introduced in the publisher policy. Para saber mais sobre como trabalhar com SAS, confira Autenticação de assinatura de acesso compartilhado com o Barramento de Serviço.For more information about working with SAS, see Shared Access Signature Authentication with Service Bus.

Consumidores de eventoEvent consumers

Qualquer entidade que lê dados de eventos de um hub de eventos é um consumidor de eventos.Any entity that reads event data from an event hub is an event consumer. Todos os consumidores de Hubs de Eventos se conectam por meio de sessão do AMQP 1.0, e os eventos são entregues por meio da sessão à medida que são disponibilizados.All Event Hubs consumers connect via the AMQP 1.0 session and events are delivered through the session as they become available. O cliente não precisa buscar pela disponibilidade de dados.The client does not need to poll for data availability.

Grupos de consumidoresConsumer groups

O mecanismo de publicação/assinatura dos Hubs de eventos é habilitado por meio de grupos de consumidores.The publish/subscribe mechanism of Event Hubs is enabled through consumer groups. Um grupo de consumidores é uma exibição (estado, posição ou deslocamento) de todo um hub de eventos.A consumer group is a view (state, position, or offset) of an entire event hub. Os grupos de consumidores permitem que vários aplicativos de consumo tenham um modo de exibição separado do fluxo de eventos e leiam o fluxo de forma independente em seu próprio ritmo e com seus próprios deslocamentos.Consumer groups enable multiple consuming applications to each have a separate view of the event stream, and to read the stream independently at their own pace and with their own offsets.

Em um arquitetura de processamento de fluxo, cada aplicativo downstream equivale a um grupo de consumidores.In a stream processing architecture, each downstream application equates to a consumer group. Se você quiser gravar dados de evento em um armazenamento de longo prazo, isso quer dizer que esse aplicativo gravador de armazenamento é um grupo de consumidores.If you want to write event data to long-term storage, then that storage writer application is a consumer group. O processamento de eventos complexos pode então ser executado por outro grupo separado de consumidores.Complex event processing can then be performed by another, separate consumer group. Você pode acessar partições somente por meio de um grupo de consumidores.You can only access partitions through a consumer group. Sempre há um grupo de consumidores padrão em um hub de eventos, e você pode criar até 20 grupos de consumidores para um hub de eventos de camada padrão.There is always a default consumer group in an event hub, and you can create up to 20 consumer groups for a Standard tier event hub.

Pode haver no máximo cinco leitores simultâneos em uma partição por grupo de consumidores. No entanto recomenda-se que haja apenas um receptor ativo em uma partição por grupo de consumidores.There can be at most 5 concurrent readers on a partition per consumer group; however it is recommended that there is only one active receiver on a partition per consumer group. Dentro de uma única partição, cada leitor recebe todas as mensagens.Within a single partition, each reader receives all of the messages. Se você tiver vários leitores na mesma partição, processará mensagens duplicadas.If you have multiple readers on the same partition, then you process duplicate messages. Você precisa lidar com isso em seu código, o que pode não ser trivial.You need to handle this in your code, which may not be trivial. No entanto, é uma abordagem válida em alguns cenários.However, it's a valid approach in some scenarios.

Alguns clientes oferecidos pelos SDKs do Azure são agentes de consumidor inteligentes que gerenciam automaticamente os detalhes da garantia de que cada partição tem um único leitor e que todas as partições para um hub de eventos estão sendo lidas.Some clients offered by the Azure SDKs are intelligent consumer agents that automatically manage the details of ensuring that each partition has a single reader and that all partitions for an event hub are being read from. Isso permite que seu código se concentre no processamento dos eventos que estão sendo lidos do hub de eventos para que ele possa ignorar muitos dos detalhes das partições.This allows your code to focus on processing the events being read from the event hub so it can ignore many of the details of the partitions. Para obter mais informações, consulte conectar-se a uma partição.For more information, see Connect to a partition.

Os exemplos a seguir mostram a Convenção de URI do grupo de consumidores:The following examples show the consumer group URI convention:

//<my namespace>.servicebus.windows.net/<event hub name>/<Consumer Group #1>
//<my namespace>.servicebus.windows.net/<event hub name>/<Consumer Group #2>

A figura a seguir mostra a arquitetura de processamento de fluxo dos Hubs de Eventos:The following figure shows the Event Hubs stream processing architecture:

Arquitetura dos hubs de eventos

Deslocamentos de fluxoStream offsets

Um deslocamento é a posição de um evento dentro de uma partição.An offset is the position of an event within a partition. Você pode pensar em um deslocamento como um cursor do lado do cliente.You can think of an offset as a client-side cursor. O deslocamento é uma numeração em bytes do evento.The offset is a byte numbering of the event. Esse deslocamento permite que um consumidor de eventos (leitor) especifique um ponto no fluxo de eventos a partir do qual deseja começar a ler eventos.This offset enables an event consumer (reader) to specify a point in the event stream from which they want to begin reading events. Você pode especificar o deslocamento como um carimbo de data hora ou um valor de deslocamento.You can specify the offset as a timestamp or as an offset value. Os consumidores são responsáveis por armazenar seu próprios valores de deslocamento fora do serviço de Hubs de Evento.Consumers are responsible for storing their own offset values outside of the Event Hubs service. Dentro de uma partição, cada evento inclui um deslocamento.Within a partition, each event includes an offset.

Deslocamento da partição

Definindo o ponto de verificaçãoCheckpointing

Ponto de verificação é um processo pelo qual os leitores marcam ou confirmam sua posição em uma sequência de eventos da partição.Checkpointing is a process by which readers mark or commit their position within a partition event sequence. O ponto de verificação é responsabilidade do consumidor e ocorre em uma base por partição dentro de um grupo de consumidores.Checkpointing is the responsibility of the consumer and occurs on a per-partition basis within a consumer group. Essa responsabilidade significa que, para cada grupo de consumidores, cada leitor de partição deve manter o controle da sua posição atual no fluxo de eventos e pode informar o serviço quando considerar o fluxo de dados concluído.This responsibility means that for each consumer group, each partition reader must keep track of its current position in the event stream, and can inform the service when it considers the data stream complete.

Se um leitor se desconecta de uma partição, ao se reconectar, ele começa a ler no ponto de verificação que foi anteriormente enviado pelo último leitor dessa partição nesse grupo de consumidores.If a reader disconnects from a partition, when it reconnects it begins reading at the checkpoint that was previously submitted by the last reader of that partition in that consumer group. Quando o leitor se conecta, ele passa esse deslocamento para o hub de eventos para especificar o local para começar a ler.When the reader connects, it passes the offset to the event hub to specify the location at which to start reading. Assim, você pode usar o ponto de verificação para marcar eventos como "concluídos" por aplicativos de downstream e oferecer resiliência caso ocorra um failover entre leitores em execução em máquinas diferentes.In this way, you can use checkpointing to both mark events as "complete" by downstream applications, and to provide resiliency if a failover between readers running on different machines occurs. É possível retornar aos dados mais antigos, especificando um deslocamento inferior desse processo de ponto de verificação.It is possible to return to older data by specifying a lower offset from this checkpointing process. Por meio desse mecanismo, o ponto de verificação permite resiliência de failover e reprodução de fluxo de eventos.Through this mechanism, checkpointing enables both failover resiliency and event stream replay.

Observação

Se você estiver usando o armazenamento de BLOBs do Azure como o armazenamento de ponto de verificação em um ambiente que dá suporte a uma versão diferente do SDK do Storage BLOB que os normalmente estão disponíveis no Azure, você precisará usar o código para alterar a versão da API do serviço de armazenamento para a versão específica com suporte desse ambiente.If you are using Azure Blob Storage as the checkpoint store in an environment that supports a different version of Storage Blob SDK than those typically available on Azure, you'll need to use code to change the Storage service API version to the specific version supported by that environment. Por exemplo, se você estiver executando os hubs de eventos em um hub de Azure Stack versão 2002, a versão mais alta disponível para o serviço de armazenamento é a versão 2017-11-09.For example, if you are running Event Hubs on an Azure Stack Hub version 2002, the highest available version for the Storage service is version 2017-11-09. Nesse caso, você precisa usar o código para direcionar a versão da API do serviço de armazenamento para 2017-11-09.In this case, you need to use code to target the Storage service API version to 2017-11-09. Para obter um exemplo de como direcionar uma versão de API de armazenamento específica, consulte estes exemplos no GitHub:For an example on how to target a specific Storage API version, see these samples on GitHub:

Tarefas comuns do consumidorCommon consumer tasks

Todos os consumidores de Hubs de Eventos se conectam por meio de uma sessão do AMQP 1.0, um canal de comunicação bidirecional com reconhecimento de estado.All Event Hubs consumers connect via an AMQP 1.0 session, a state-aware bidirectional communication channel. Cada partição tem uma sessão de AMQP 1.0 que facilita o transporte de eventos separados por partição.Each partition has an AMQP 1.0 session that facilitates the transport of events segregated by partition.

Conectar-se a uma partiçãoConnect to a partition

Ao se conectar a partições, é uma prática comum usar um mecanismo de leasing para coordenar conexões de leitor a partições específicas.When connecting to partitions, it's common practice to use a leasing mechanism to coordinate reader connections to specific partitions. Dessa forma, é possível que todas as partições em um grupo de consumidores tenham apenas um leitor ativo.This way, it's possible for every partition in a consumer group to have only one active reader. Os leitores de ponto de verificação, leasing e gerenciamento são simplificados usando os clientes nos SDKs dos hubs de eventos, que atuam como agentes inteligentes de consumidor.Checkpointing, leasing, and managing readers are simplified by using the clients within the Event Hubs SDKs, which act as intelligent consumer agents. Eles são:These are:

Ler eventosRead events

Depois de uma sessão do AMQP 1.0 e o link ser aberto para uma partição específica, os eventos são entregues ao cliente AMQP 1.0 pelo serviço de Hubs de Evento.After an AMQP 1.0 session and link is opened for a specific partition, events are delivered to the AMQP 1.0 client by the Event Hubs service. Esse mecanismo de entrega permite uma maior taxa de transferência e menor latência que mecanismos baseado em pull, como HTTP GET.This delivery mechanism enables higher throughput and lower latency than pull-based mechanisms such as HTTP GET. Como os eventos são enviados para o cliente, cada instância de dados do evento contém metadados importantes, como o deslocamento e número da sequência que são usados para facilitar o ponto de verificação na sequência de eventos.As events are sent to the client, each event data instance contains important metadata such as the offset and sequence number that are used to facilitate checkpointing on the event sequence.

Dados de evento:Event data:

  • DeslocamentoOffset
  • Número de sequênciaSequence number
  • CorpoBody
  • Propriedades do usuárioUser properties
  • Propriedades do sistemaSystem properties

Ele é responsável por gerenciar o deslocamento.It is your responsibility to manage the offset.

Próximas etapasNext steps

Para saber mais sobre Hubs de Eventos, acesse os seguintes links:For more information about Event Hubs, visit the following links: