O que é o Hubs de Eventos do Azure para Apache Kafka

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

Observação

Esse recurso tem suporte apenas nas camadas Standard, Premium e Dedicada.

Visão geral

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

Observação

Os Hubs de Eventos do Azure para Ecossistemas do Kakfa são compatíveis com Apache Kafka versão 1.0.

Mapeamento conceitual do Apache Kafka e dos Hubs de Eventos do Azure

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

Conceito de Kafka Conceito de Hubs de Eventos
Cluster Namespace
Tópico Um hub de eventos
Partição Partição
Grupo de Consumidores Grupo de Consumidores
Deslocamento Deslocamento

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

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

Para obter mais informações sobre namespaces e Hubs de Eventos, 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 o ponto de extremidade, para que os clientes não precisem saber sobre os agentes ou computadores em um cluster. Embora os Hubs de Eventos implementem o mesmo protocolo, essa diferença significa que todo o tráfego Kafka de todas as partições é roteado de forma previsível por meio desse ponto de extremidade, em vez de exigir acesso de firewall para todos os agentes de um cluster.

A escala nos Hubs de Eventos é controlada por quantas unidades de produtividade (TUs) ou unidades de processamento você compra. Se você habilitar o recurso Ampliação automática para um namespace de camada standard, os Hubs de Eventos vão automaticamente escalar verticalmente as TUs quando você atingir o limite de taxa de transferência. Esse recurso também funciona com o suporte do 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 sua carga de trabalho?

Se você cria aplicativos que usam Apache Kafka, também é importante 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 sugiram que a solução seja completa para todas as necessidades de plataforma de mensagens, na verdade, ele não implementa, por exemplo, o padrão de fila de consumidor concorrente e não tem suporte para publicação/assinatura em um nível que permite aos assinantes acesso a mensagens de entrada com base em regras avaliadas pelo servidor que não sejam de deslocamentos simples. Além disso, a solução não tem recursos para acompanhar o ciclo de vida de um trabalho iniciado por uma mensagem ou para mover mensagens com falha para uma fila de mensagens mortas, fundamentais em muitos cenários de sistema de mensagem corporativo.

Para entender as diferenças entre padrões e identificar quais serviços oferecem a melhor cobertura para quais padrões, confira as diretrizes Opções de mensagens assíncronas no Azure. Como usuário do Apache Kafka, você pode ver que os caminhos de comunicação que você tem até agora com o Kafka podem ser obtidos com complexidade muito menos básica e com recursos mais poderosos usando a Grade de Eventos ou o Barramento de Serviço.

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

Segurança e autenticação

Sempre que você publica ou consome eventos de Hubs de Eventos para Kafka, o cliente está tentando acessar os recursos dos Hubs de Eventos. Garanta que os recursos sejam acessados usando uma entidade autorizada. Ao usar o protocolo Apache Kafka com os clientes, você pode definir a configuração de autenticação e criptografia usando os mecanismos SASL. Usar os Hubs de Eventos no Kafka exige a criptografia TLS, pois todos os dados em trânsito com os Hubs de Eventos são criptografados por TLS. Para isso, você pode especificar a opção SASL_SSL no arquivo de configuração.

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

  • OAuth 2.0
  • Assinatura de acesso compartilhado (SAS)

OAuth 2.0

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

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

Observação

As propriedades de configuração acima se destinam à linguagem de programação Java. Para ver exemplos que mostram como usar o OAuth com os Hubs de Eventos para Kafka usando diferentes linguagens de programação, confira os exemplos no GitHub.

SAS (Assinatura de Acesso Compartilhado)

Os Hubs de Eventos também fornecem as SAS (assinaturas de acesso compartilhado) para acesso delegado aos Hubs de Eventos para recursos Kafka. A autorização de acesso usando o mecanismo baseado em token OAuth 2.0 fornece segurança superior e facilidade de uso do que 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 os clientes do 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 seu namespace dos Hubs de Eventos. Para ver as instruções sobre como obter uma cadeia de conexão, confira Obter cadeia de conexão para 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";

Observação

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

Observação

Tokens de assinatura de acesso compartilhado gerados não têm suporte ao usar os Hubs de Eventos para o ponto de extremidade Apache Kafka.

Exemplos

Para obter um tutorial com as instruções detalhadas para criar um hub de eventos e acessá-lo usando SAS ou OAuth, confira Início Rápido: streaming de dados com Hubs de Eventos usando o protocolo Kafka.

Outros recursos do 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 fazer uma gravação com qualquer um desses protocolos e ler com qualquer outro, para que seus produtores do Apache Kafka atuais continuem publicando via Apache Kafka. No entanto, o 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 rapidamente 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 Captura, que permitem arquivamento de longo prazo extremamente econômico por meio do Armazenamento de Blobs do Azure e do Azure Data Lake Storage e a Recuperação de Desastre Geográfico também funcionam com o recurso dos Hubs de Eventos no Kafka.

Idempotência

Os Hubs de Eventos do Azure para Apache Kafka dão suporte a produtores e consumidores idempotentes.

Um dos princípios básicos dos Hubs de Eventos do Azure é o conceito de entrega pelo menos uma vez. Essa abordagem garante que os eventos sempre serão entregues. Isso também significa que os eventos podem ser recebidos mais de uma vez, mesmo repetidamente, pelos consumidores como uma função. Por esse motivo, é importante que o consumidor dê suporte ao padrão de consumidor idempotente.

Diferenças de recursos com o Apache Kafka

A meta dos Hubs de Eventos para Apache Kafka é fornecer acesso às funcionalidades dos Hubs de Eventos do Azure aos aplicativos que estão bloqueados na API do Apache Kafka e que, de outro modo, precisariam ter o suporte de um cluster Apache Kafka.

Como explicado acima, a frota do Messaging do Azure fornece cobertura avançada e robusta para uma infinidade de cenários de mensagens. Embora os recursos a seguir não tenham suporte no momento por meio do suporte de Hubs de Eventos para a API do Apache Kafka, indicamos onde e como o recurso desejado está disponível.

Transactions

O Barramento de Serviço do Azure tem suporte de transação robusto que permite receber e acomodar mensagens e sessões ao enviar 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 permite processar cada mensagem exatamente uma vez em uma sequência e evita o risco de outro consumidor reprocessar inadvertidamente as mesmas mensagens, como aconteceria no Apache Kafka. O Barramento de Serviço é o serviço recomendado para cargas de trabalho de mensagens transacionais.

Compactaçã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 agente do Apache Kafka trata o lote como uma mensagem especial.

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

Compression.type = none | gzip

No momento, o recurso é compatível apenas com o tráfego de produtores e consumidores do Apache Kafka. O consumidor AMQP pode consumir o tráfego Kafka compactado como mensagens descompactadas. O conteúdo de qualquer evento dos Hubs de Eventos é um fluxo de bytes e o conteúdo pode ser compactado com um algoritmo de sua escolha, embora, na versão prévia pública, a única opção seja gzip. Os benefícios de usar a compactação Kafka são o uso de tamanho de mensagem menor, o aumento do tamanho do conteúdo que você pode transmitir e a redução do consumo de recursos do agente de mensagens.

Kafka Streams

Kafka Streams é uma biblioteca de clientes do Stream Analytics que faz parte do projeto de código aberto do Apache Kafka, mas está separada do agente de fluxo de evento do Apache Kafka.

O motivo mais comum para os clientes dos Hubs de Eventos do Azure solicitarem suporte ao Kafka Streams é o interesse no produto "ksqlDB" do Confluent. "ksqlDB" é um projeto proprietário de origem compartilhada e licenciado de modo que nenhum fornecedor que "ofereça software como serviço, plataforma como serviço, infraestrutura como serviço ou outros serviços online semelhantes que concorrem com produtos ou serviços do Confluent" tenha permissão para usar ou dar suporte ao "ksqlDB". Na prática, se você usar ksqlDB, você deve operar o Kafka por conta própria ou usar as ofertas de nuvem do Confluent. Os termos de licenciamento também podem afetar os clientes do Azure que oferecem serviços para uma finalidade não incluída na licença.

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

Os serviços e as estruturas listados geralmente podem adquirir fluxos de eventos e dados de referência diretamente de um conjunto variado de fontes por meio de adaptadores. O Kafka Stream só pode adquirir dados do Apache Kafka e, portanto, os 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 do Kafka Connect.

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

Próximas etapas

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

Para obter um tutorial com as instruções detalhadas para criar um hub de eventos e acessá-lo usando SAS ou OAuth, confira Início Rápido: streaming de dados com Hubs de Eventos usando o protocolo Kafka.

Além disso, confira os exemplos de OAuth no GitHub.