O que são Hubs de Eventos do Azure para Apache Kafka

Este artigo explica como você pode usar os Hubs de Eventos do Azure para transmitir dados de aplicativos Apache Kafka sem configurar um cluster Kafka por conta própria.

Nota

Este recurso é suportado apenas nos níveis padrão, premium e dedicado .

Descrição geral

Os Hubs de Eventos do Azure fornecem um ponto de extremidade Apache Kafka em um hub de eventos, que permite que os usuários se conectem ao hub de eventos usando o protocolo Kafka. Muitas vezes, você pode usar o ponto de extremidade Kafka de um hub de eventos de seus aplicativos sem alterações de código. Você modifica apenas a configuração, ou seja, atualiza a cadeia de conexão em configurações para apontar para o ponto de extremidade Kafka exposto pelo hub de eventos em vez de apontar para um cluster Kafka. Em seguida, você pode começar a transmitir eventos de seus aplicativos que usam o protocolo Kafka para hubs de eventos, que são equivalentes aos tópicos Kafka.

Nota

Os Hubs de Eventos para Ecossistemas Kafka suportam o Apache Kafka versão 1.0 e posterior.

Apache Kafka e mapeamento conceitual dos Hubs de Eventos do Azure

Conceitualmente, Kafka e Hubs de Eventos são muito semelhantes. Ambos são logs particionados criados para streaming de dados, em que o cliente controla qual parte do log retido deseja ler. A tabela a seguir mapeia conceitos entre Kafka e Hubs de Eventos.

Conceito Kafka Conceito de Hubs de Eventos
Cluster Espaço de Nomes
Tópico Um hub de eventos
Partição Partição
Grupo de Consumidores Grupo de Consumidores
Desvio Desvio

Principais diferenças entre o Apache Kafka e os Hubs de Eventos do Azure

Enquanto o Apache Kafka é um software que você normalmente precisa instalar e operar, o Event Hubs é um serviço totalmente gerenciado e nativo da nuvem. Não há servidores, discos ou redes para gerenciar e monitorar e nenhum broker para considerar ou configurar, nunca. Você cria um namespace, que é um ponto de extremidade com um nome de domínio totalmente qualificado e, em seguida, cria Hubs de Eventos (tópicos) dentro desse namespace.

Para obter mais informações sobre Hubs de Eventos e namespaces, consulte Recursos de Hubs de Eventos. Como um serviço de nuvem, os Hubs de Eventos usam um único endereço IP virtual estável como ponto de extremidade, para que os clientes não precisem saber sobre os corretores ou máquinas dentro de um cluster. Embora os Hubs de Eventos implementem o mesmo protocolo, essa diferença significa que todo o tráfego Kafka para todas as partições é previsivelmente roteado através deste ponto final, em vez de exigir acesso ao firewall para todos os corretores de um cluster.

A escala nos Hubs de Eventos é controlada pelo número de unidades de taxa de transferência (TUs) ou unidades de processamento adquiridas. Se você habilitar o recurso Auto-Inflate para um namespace de camada padrão, os Hubs de Eventos aumentarão automaticamente as TUs quando você atingir o limite de taxa de transferência. Este recurso também funciona com o suporte ao protocolo Apache Kafka. Para um namespace de camada premium, você pode aumentar o número de unidades de processamento atribuídas ao namespace.

O Apache Kafka é a solução certa para a sua carga de trabalho?

Vindo da criação de aplicativos usando o Apache Kafka, também é útil entender que os Hubs de Eventos do Azure fazem parte de uma frota de serviços, que também inclui o Barramento de Serviço do Azure e a Grade de Eventos do Azure.

Embora alguns provedores de distribuições comerciais do Apache Kafka possam sugerir que o Apache Kafka é um balcão único para todas as suas necessidades de plataforma de mensagens, a realidade é que o Apache Kafka não implementa, por exemplo, o padrão de fila de consumidor concorrente, não tem suporte para publicar-assinar em um nível que permita aos assinantes acesso às mensagens recebidas com base em regras avaliadas pelo servidor que não sejam compensações simples, e não tem recursos para rastrear o ciclo de vida de um trabalho iniciado por uma mensagem ou deixar de lado mensagens defeituosas em uma fila de mensagens mortas, que são fundamentais para muitos cenários de mensagens corporativas.

Para entender as diferenças entre padrões e qual padrão é melhor coberto por qual serviço, consulte as opções de mensagens assíncronas nas diretrizes do Azure . Como um usuário do Apache Kafka, você pode descobrir que os caminhos de comunicação que você realizou até agora com o Kafka, podem ser realizados com muito menos complexidade básica e ainda mais recursos poderosos usando a Grade de Eventos ou o Service Bus.

Se você precisar de recursos específicos do Apache Kafka que não estão disponíveis por meio da interface dos Hubs de Eventos para Apache Kafka ou se seu padrão de implementação exceder as cotas dos Hubs de Eventos, você também poderá executar um cluster Apache Kafka nativo no Azure HDInsight.

Segurança e autenticação

Toda vez que você publica ou consome eventos de um Hubs de Eventos para Kafka, seu cliente está tentando acessar os recursos dos Hubs de Eventos. Você deseja garantir que os recursos sejam acessados usando uma entidade autorizada. Ao usar o protocolo Apache Kafka com seus clientes, você pode definir sua configuração para autenticação e criptografia usando os mecanismos SASL. Quando o uso de Hubs de Eventos para Kafka requer a criptografia TLS (como todos os dados em trânsito com Hubs de Eventos são criptografados por TLS), isso pode ser feito especificando a opção SASL_SSL em seu arquivo de configuração.

Os Hubs de Eventos do Azure fornecem várias opções para autorizar o acesso aos seus recursos seguros.

  • OAuth 2.0
  • Assinatura de acesso partilhado (SAS)

OAuth 2.0

Os Hubs de Eventos integram-se com o Microsoft Entra ID, que fornece um servidor de autorização centralizado compatível com OAuth 2.0 . Com o Microsoft Entra ID, você pode usar o controle de acesso baseado em função do Azure (Azure RBAC) para conceder permissões refinadas às suas identidades de cliente. Você pode usar esse recurso com seus clientes Kafka, especificando SASL_SSL para o protocolo e OAUTHBEARER para o mecanismo. Para obter detalhes sobre funções e níveis do Azure para acesso de escopo, consulte Autorizar acesso com ID do Microsoft Entra.

bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;
sasl.login.callback.handler.class=CustomAuthenticateCallbackHandler

Nota

As propriedades de configuração acima são para a linguagem de programação Java. Para exemplos que mostram como usar OAuth com Hubs de Eventos para Kafka usando diferentes linguagens de programação, consulte exemplos no GitHub.

Assinatura de Acesso Partilhado (SAS)

Os Hubs de Eventos também fornecem as Assinaturas de Acesso Compartilhado (SAS) para acesso delegado aos Hubs de Eventos para recursos do Kafka. Autorizar o acesso usando o mecanismo baseado em token OAuth 2.0 oferece segurança superior e facilidade de uso em relação ao SAS. As funções internas também podem eliminar a necessidade de autorização baseada em ACL, que deve ser mantida e gerenciada pelo usuário. Você pode usar esse recurso com seus clientes Kafka especificando SASL_SSL para o protocolo e PLAIN para o mecanismo.

bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}";

Importante

Substitua {YOUR.EVENTHUBS.CONNECTION.STRING} pela cadeia de conexão do namespace Hubs de Eventos. Para obter instruções sobre como obter a cadeia de conexão, consulte Obter uma cadeia de conexão de Hubs de Eventos. Aqui está um exemplo de configuração: sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="Endpoint=sb://mynamespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXXXXXXXXXXXXXX";

Nota

Ao usar a autenticação SAS com clientes Kafka, as conexões estabelecidas não são desconectadas quando a chave SAS é regenerada.

Nota

Os tokens de assinatura de acesso compartilhado gerados não são suportados ao usar os Hubs de Eventos para o ponto de extremidade Apache Kafka.

Exemplos

Para obter um tutorial com instruções passo a passo para criar um hub de eventos e acessá-lo usando SAS ou OAuth, consulte Guia de início rápido: streaming de dados com Hubs de Eventos usando o protocolo Kafka.

Outros recursos dos Hubs de Eventos do Azure

O recurso Hubs de Eventos para Apache Kafka é um dos três protocolos disponíveis simultaneamente nos Hubs de Eventos do Azure, complementando HTTP e AMQP. Você pode escrever com qualquer um desses protocolos e ler com qualquer outro, para que seus produtores atuais do Apache Kafka possam continuar publicando via Apache Kafka, mas seu leitor pode se beneficiar da integração nativa com a interface AMQP dos Hubs de Eventos, como o Azure Stream Analytics ou o Azure Functions. Por outro lado, você pode integrar prontamente os Hubs de Eventos do Azure em redes de roteamento AMQP como um ponto de extremidade de destino e, ainda assim, ler dados por meio de integrações do Apache Kafka.

Além disso, os recursos dos Hubs de Eventos, como o Capture, que permite o arquivamento de longo prazo extremamente econômico por meio do Armazenamento de Blobs do Azure e do Armazenamento do Azure Data Lake, e a Recuperação de Desastres Geográficos também funcionam com o recurso Hubs de Eventos para Kafka.

Idempotência

Os Hubs de Eventos do Azure para Apache Kafka suportam produtores idempotentes e consumidores idempotentes.

Um dos princípios fundamentais dos Hubs de Eventos do Azure é o conceito de entrega pelo menos uma vez . Esta abordagem garante que os eventos serão sempre entregues. Significa também que os eventos podem ser recebidos mais do que uma vez, mesmo repetidamente, pelos consumidores, tal como uma função. Por esse motivo, é importante que o consumidor apoie o padrão de consumo idempotente.

Diferenças de recursos com o Apache Kafka

O objetivo dos Hubs de Eventos para Apache Kafka é fornecer acesso aos recursos dos Hubs de Eventos do Azure para aplicativos que estão bloqueados na API do Apache Kafka e que, de outra forma, teriam que ser apoiados por um cluster Apache Kafka.

Conforme explicado acima, a frota do Azure Messaging fornece cobertura rica e robusta para uma infinidade de cenários de mensagens e, embora os seguintes recursos não sejam suportados atualmente pelo suporte dos Hubs de Eventos para a API Apache Kafka, apontamos onde e como o recurso desejado está disponível.

Transações

O Barramento de Serviço do Azure tem suporte robusto a transações que permite receber e liquidar mensagens e sessões enquanto envia mensagens de saída resultantes do processamento de mensagens para várias entidades de destino sob a proteção de consistência de uma transação. O conjunto de recursos não só permite exatamente um processamento de cada mensagem em uma sequência, mas também evita o risco de outro consumidor reprocessar inadvertidamente as mesmas mensagens, como seria o caso do Apache Kafka. O Service Bus é o serviço recomendado para cargas de trabalho de mensagens transacionais.

Compressão

O recurso de compactação do lado do cliente do Apache Kafka compacta um lote de várias mensagens em uma única mensagem no lado do produtor e descompacta o lote no lado do consumidor. O corretor Apache Kafka trata o lote como uma mensagem especial.

Os desenvolvedores de aplicativos produtores de Kafka podem habilitar a compactação de mensagens definindo a propriedade compression.type. Na pré-visualização pública, o único algoritmo de compressão suportado é o gzip.

Compression.type = none | gzip

Atualmente, o recurso é suportado apenas para o produtor de tráfego Apache Kafka e tráfego de consumidores. O consumidor AMQP pode consumir tráfego Kafka comprimido como mensagens descomprimidas. A carga útil de qualquer evento de Hubs de Eventos é um fluxo de bytes e o conteúdo pode ser compactado com um algoritmo de sua escolha, embora na visualização pública, a única opção seja gzip. Os benefícios de usar a compactação Kafka são através do tamanho menor da mensagem, maior tamanho da carga útil que você pode transmitir e menor consumo de recursos do agente de mensagens.

Córregos Kafka

Kafka Streams é uma biblioteca de cliente para análise de fluxo que faz parte do projeto de código aberto Apache Kafka, mas é separada do corretor de eventos Apache Kafka.

A razão mais comum pela qual os clientes dos Hubs de Eventos do Azure solicitam suporte ao Kafka Streams é porque estão interessados no produto "ksqlDB" da Confluent. "ksqlDB" é um projeto proprietário de fonte compartilhada que é licenciado de tal forma que nenhum fornecedor "que oferece software como serviço, plataforma como serviço, infraestrutura como serviço ou outros serviços online semelhantes que competem com produtos ou serviços Confluent" tem permissão para usar ou oferecer suporte a "ksqlDB". Praticamente, se você usa o ksqlDB, você mesmo deve operar o Kafka ou usar as ofertas de nuvem da Confluent. Os termos de licenciamento também podem afetar os clientes do Azure que oferecem serviços para uma finalidade excluída pela licença.

Autônomo e sem ksqlDB, o Kafka Streams tem menos recursos do que muitas estruturas e serviços alternativos, a maioria dos quais tem interfaces SQL de streaming internas e todos os quais se integram aos Hubs de Eventos do Azure atualmente:

Os serviços e estruturas listados geralmente podem adquirir fluxos de eventos e dados de referência diretamente de um conjunto diversificado de fontes por meio de adaptadores. O Kafka Streams só pode adquirir dados do Apache Kafka e, portanto, seus projetos de análise estão bloqueados no Apache Kafka. Para usar dados de outras fontes, é necessário primeiro importar dados para o Apache Kafka com a estrutura Kafka Connect.

Se você precisar usar a estrutura do Kafka Streams no Azure, o Apache Kafka no HDInsight fornecerá essa opção. O Apache Kafka no HDInsight fornece controle total sobre todos os aspetos de configuração do Apache Kafka, ao mesmo tempo em que é totalmente integrado com vários aspetos da plataforma Azure, desde o posicionamento do domínio de falha/atualização até o isolamento de rede e a integração de monitoramento.

Próximos passos

Este artigo forneceu uma introdução aos Hubs de Eventos para Kafka. Para saber mais, consulte Guia do desenvolvedor do Apache Kafka para Hubs de Eventos do Azure.

Para obter um tutorial com instruções passo a passo para criar um hub de eventos e acessá-lo usando SAS ou OAuth, consulte Guia de início rápido: streaming de dados com Hubs de Eventos usando o protocolo Kafka.

Além disso, consulte os exemplos OAuth no GitHub.