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.
Para saber mais sobre como migrar seus aplicativos Kafka para os Hubs de Eventos do Azure, consulte o guia de migração.
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 |
Recursos do Apache Kafka com suporte nos Hubs de Eventos do Azure
Córregos Kafka
Nota
Kafka Streams está atualmente em pré-visualização pública no nível Premium e dedicado.
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.
Os Hubs de Eventos do Azure dão suporte à biblioteca de cliente Kafka Streams, com detalhes e conceitos disponíveis aqui.
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:
- Azure Stream Analytics
- Azure Synapse Analytics (através da Captura de Hubs de Eventos)
- Azure Databricks
- Apache Samza
- Apache Storm
- Apache Spark
- Apache Flink
- Apache Flink no HDInsight no AKS
- Córregos Akka
Transações Kafka
Nota
Kafka Transactions está atualmente em pré-visualização pública no nível Premium e dedicado.
Os Hubs de Eventos do Azure dão suporte a transações Kafka. Mais detalhes sobre o suporte e conceitos estão disponíveis aqui
Compressão
Nota
Atualmente, a compactação Kafka para Hubs de Eventos só é suportada nas camadas Premium e Dedicado.
O recurso de compactação do lado do cliente em clientes Apache Kafka conserva recursos de computação e largura de banda compactando um lote de várias mensagens em uma única mensagem no lado do produtor e descompactando 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. Atualmente, os Hubs de Eventos do Azure dão suporte à gzip
compactação.
Compression.type = none | gzip
Embora o recurso seja suportado apenas para o produtor de tráfego Apache Kafka e o tráfego do consumidor, o consumidor AMQP pode consumir tráfego Kafka compactado como mensagens descompactadas.
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.
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.