Use hubs de eventos Azure a partir de aplicações Apache Kafka

O Event Hubs fornece um ponto final compatível com as APIs de produtor e consumidor apache kafka ® que podem ser usadas pela maioria das aplicações de clientes Apache Kafka existentes como alternativa à gestão do seu próprio cluster Apache Kafka. O Event Hubs apoia os clientes APIs de produtor e consumidor da Apache Kafka na versão 1.0 ou superior.

O que os Centros de Eventos de Kafka fornecem?

O evento Hubs for Apache Kafka apresenta uma cabeça de protocolo em cima dos Azure Event Hubs que é compatível com os clientes Apache Kafka construídos para as versões de servidor Apache Kafka 1.0 e posteriormente e suporta tanto a leitura de ambos os Centros de Eventos, que são equivalentes aos tópicos apache kafka.

Pode frequentemente utilizar o ponto final do Event Hubs Kafka a partir das suas aplicações sem alterações de código em comparação com a configuração existente de Kafka e apenas modificar a configuração: Atualize a cadeia de ligação em configurações para apontar para o ponto final kafka exposto pelo seu centro de eventos em vez de apontar para o seu cluster Kafka. Em seguida, pode começar a transmitir eventos a partir das suas aplicações que usam o protocolo Kafka em Event Hubs.

Conceptualmente, os Centros de Kafka e Eventos são muito semelhantes: são ambos registos divididos construídos para dados de streaming, pelo que o cliente controla qual parte do registo retido que quer ler. Os seguintes conceitos de mapas de mesa entre Kafka e Event Hubs.

Mapeamento conceptual kafka e Event Hub

Conceito kafka Conceito de hubs de eventos
Cluster Espaço de Nomes
Tópico Hub de Eventos
Partição Partição
Grupo de Consumidores Grupo de Consumidores
Desvio Desvio

Principais diferenças entre Apache Kafka e Centros de Eventos

Enquanto o Apache Kafka é um software que normalmente precisa para instalar e operar, o Event Hubs é um serviço totalmente gerido e nativo da nuvem. Não existem servidores, discos ou redes para gerir e monitorizar e nenhum corretor a considerar ou configurar, nunca. Você cria um espaço de nome, que é um ponto final com um nome de domínio totalmente qualificado, e então você cria Centros de Evento (tópicos) dentro desse espaço de nome.

Para obter mais informações sobre os Centros de Eventos e espaços de nome, consulte as funcionalidades do Event Hubs. Como serviço na nuvem, o Event Hubs utiliza um único endereço IP virtual estável como ponto final, para que os clientes não precisem de saber sobre os corretores ou máquinas dentro de um cluster. Mesmo que o Event Hubs implemente o mesmo protocolo, esta diferença significa que todo o tráfego kafka para todas as divisórias é previsivelmente encaminhado através deste ponto final em vez de exigir acesso de firewall para todos os corretores de um cluster.

A escala em Event Hubs é controlada por quantas unidades de produção (TUs) ou unidades de processamento você compra. Se ativar a função Auto-Insuflado para um espaço de nome de nível padrão, os Centros de Eventos escalam automaticamente as TUs quando atinge o limite de saída. Este trabalho de recurso também funciona com o suporte do protocolo Apache Kafka. Para um espaço de nome de nível principal, pode aumentar o número de unidades de processamento atribuídas ao espaço de nomes.

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

Vindo de aplicações de construção usando Apache Kafka, também é útil entender que a Azure Event Hubs faz parte de uma frota de serviços, que também inclui Azure Service Bus, e Azure Event Grid.

Embora alguns fornecedores de distribuição comercial da Apache Kafka possam sugerir que a Apache Kafka é um balcão único para todas as necessidades da sua plataforma de mensagens, a realidade é que a Apache Kafka não implementa, por exemplo, o padrão de fila concorrente do consumidor, não tem suporte para publicar-subscrever a um nível que permita aos assinantes aceder às mensagens recebidas com base em regras avaliadas pelo servidor que não sejam compensações simples, e não tem instalações para acompanhar o ciclo de vida de um trabalho iniciado por uma mensagem ou lateralmente a partir de mensagens defeituosas numa fila de letras mortas, todas elas fundamentais para muitos cenários empresariais.

Para entender as diferenças entre padrões e qual o padrão melhor coberto por qual serviço, consulte as opções de mensagens Assíncronas na orientação do Azure. Como utilizador da Apache Kafka, poderá descobrir que os caminhos de comunicação que até agora realizou com Kafka, podem ser realizados com uma complexidade muito menos básica e capacidades ainda mais poderosas usando a Grade de Eventos ou Service Bus.

Se precisar de características específicas do Apache Kafka que não estão disponíveis através dos Centros de Eventos para a interface Apache Kafka ou se o seu padrão de implementação exceder as quotas do Event Hubs,também pode executar um cluster Apache Kafka nativo em Azure HDInsight.

Segurança e autenticação

Sempre que publica ou consome eventos a partir de um Centro de Eventos para a Kafka, o seu cliente está a tentar aceder aos recursos do Event Hubs. Pretende assegurar que os recursos são acedidos através de uma entidade autorizada. Ao utilizar o protocolo Apache Kafka com os seus clientes, pode definir a sua configuração para autenticação e encriptação utilizando os mecanismos SASL. Ao utilizar os Centros de Eventos para Kafka requer a encriptação TLS (como todos os dados em trânsito com Os Centros de Eventos são encriptados por TLS), pode ser feito especificando a opção SASL_SSL no seu ficheiro de configuração.

O Azure Event Hubs oferece múltiplas opções para autorizar o acesso aos seus recursos seguros.

  • OAuth 2.0
  • Assinatura de acesso partilhado (SAS)

OAuth 2.0

O Event Hubs integra-se com Azure Ative Directory (Azure AD), que fornece um servidor de autorização centralizado compatível com OAuth 2.0. Com a Azure AD, pode utilizar o controlo de acesso baseado em funções (Azure RBAC) para conceder permissões finas às identidades do seu cliente. Pode utilizar esta funcionalidade com os seus clientes Kafka especificando SASL_SSL para o protocolo e OAUTHBEARER para o mecanismo. Para obter mais informações sobre as funções e níveis de Azure para o acesso à deteção, consulte o Acesso autorizado com a Azure AD.

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

Assinatura de Acesso Partilhado (SAS)

O Event Hubs também fornece as Assinaturas de Acesso Compartilhado (SAS) para acesso delegado aos Centros de Eventos para recursos kafka. Autorizar o acesso utilizando o mecanismo baseado em fichas OAuth 2.0 proporciona uma segurança superior e facilidade de utilização sobre o SAS. As funções incorporadas também podem eliminar a necessidade de autorização baseada em ACL, que tem de ser mantida e gerida pelo utilizador. Pode utilizar esta funcionalidade com os seus clientes Kafka especificando SASL_SSL para o protocolo e a 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

{YOUR.EVENTHUBS.CONNECTION.STRING}Substitua-a pela cadeia de ligação para o seu espaço de nomes 'Centros de Eventos'. Para obter instruções sobre a obtenção da cadeia de ligação, consulte obter uma cadeia de ligação Dos Centros de Eventos. Aqui está uma configuração de exemplo: 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 utilizar a autenticação SAS com clientes Kafka, as ligações estabelecidas não são desligadas quando a tecla SAS é regenerada.

Amostras

Para um tutorial com instruções passo a passo para criar um centro de eventos e acessá-lo usando SAS ou OAuth, consulte Quickstart: Streaming de dados com Centros de Eventos utilizando o protocolo Kafka.

Para mais amostras que mostrem como usar o OAuth com Os Centros de Eventos para Kafka, consulte as amostras em GitHub.

Outras funcionalidades do Event Hubs

O evento Hubs para Apache Kafka é um dos três protocolos disponíveis simultaneamente nos Azure Event Hubs, complementando HTTP e AMQP. Pode escrever com qualquer um destes protocolos e ler com qualquer outro, para que os seus atuais produtores Apache Kafka possam continuar a publicar através da Apache Kafka, mas o seu leitor pode beneficiar da integração nativa com a interface AMQP do Event Hubs, como a Azure Stream Analytics ou Azure Functions. Inversamente, pode facilmente integrar os Hubs de Eventos Azure em redes de encaminhamento AMQP como ponto final alvo, e ainda ler dados através das integrações apache Kafka.

Além disso, funcionalidades de Event Hubs como Capture, que permite arquivos de longo prazo extremamente eficientes em termos de custos através da Azure Blob Armazenamento e Azure Data Lake Armazenamento, e Geo Disaster-Recovery também trabalham com os Centros de Eventos para recurso Kafka.

Apache Kafka apresenta diferenças

O objetivo do Event Hubs para Apache Kafka é fornecer acesso às capacidades do Azure Event Hub para aplicações que estão bloqueadas na API Apache Kafka e que de outra forma teriam de ser apoiadas por um cluster Apache Kafka.

Como explicado acima,a frota de mensagens Azure oferece uma cobertura rica e robusta para uma multiplicidade de cenários de mensagens, e embora as seguintes funcionalidades não sejam atualmente suportadas através do suporte do Event Hubs para a API Apache Kafka, apontamos onde e como a capacidade desejada está disponível.

Transações

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

Compressão

A função de compressão do lado do cliente da Apache Kafka comprime um lote de várias mensagens numa única mensagem do lado do produtor e descomprime o lote do lado do consumidor. O corretor Apache Kafka trata o lote como uma mensagem especial.

Esta funcionalidade está fundamentalmente em desacordo com o modelo multi-protocolo do Azure Event Hubs, que permite que as mensagens, mesmo as enviadas em lotes, sejam extra-obtidas individualmente do corretor e através de qualquer protocolo.

A carga útil de qualquer evento event Hub é um byte stream e o conteúdo pode ser comprimido com um algoritmo à sua escolha. O formato de codificação Apache Avro suporta a compressão de forma nativa.

Compaction de registo

A compactação de log Apache Kafka é uma característica que permite despejar todos, menos o último registo de cada chave de uma partição, que efetivamente transforma um tópico Apache Kafka numa loja de valor-chave onde o último valor acrescentado se sobrepõe à anterior. Esta funcionalidade não é atualmente implementada pelo Azure Event Hubs. O padrão de loja de valor-chave, mesmo com atualizações frequentes, é muito melhor suportado por serviços de base de dados como o Azure Cosmos DB. Para obter mais informações, consulte a Projeção de Registo.

kafka Fluxos

Kafka Fluxos é uma biblioteca de clientes para análise de streaming que faz parte do projeto de código aberto Apache Kafka, mas é separada do corretor de stream de eventos Apache Kafka.

A razão mais comum para os clientes do Azure Event Hubs pedirem suporte Fluxos kafka é porque estão interessados no produto "ksqlDB" da Confluent. "ksqlDB" é um projeto de fonte partilhada proprietário que é licenciado de modo a que nenhum fornecedor "ofereça software-as-a-service, plataforma-as-a-service, infra-estruturas-as-a-service, ou outros serviços online similares que competem com produtos ou serviços confluentes" seja autorizado a usar ou oferecer suporte "ksqlDB". Na prática, se utilizar o ksqlDB, deve operar o próprio Kafka ou deve utilizar as ofertas em nuvem da Confluent. As condições de licenciamento também podem afetar os clientes da Azure que oferecem serviços para um propósito excluído pela licença.

Autónomo e sem ksqlDB, a Kafka Fluxos tem menos capacidades do que muitos quadros e serviços alternativos, a maioria dos quais têm interfaces de SQL de streaming incorporados, e todos os quais se integram com a Azure Event Hubs hoje:

Os serviços e quadros listados podem geralmente adquirir fluxos de eventos e dados de referência diretamente de um conjunto diversificado de fontes através de adaptadores. Kafka Fluxos só pode adquirir dados da Apache Kafka e os seus projetos de análise estão, portanto, bloqueados em Apache Kafka. Para utilizar dados de outras fontes, é obrigado a primeiro importar dados para Apache Kafka com o quadro Ligação Kafka.

Se tiver de utilizar a estrutura Fluxos Kafka em Azure, a Apache Kafka em HDInsight fornecer-lhe-á essa opção. Apache Kafka em HDInsight fornece controlo total sobre todos os aspetos de configuração de Apache Kafka, ao mesmo tempo que está totalmente integrado com vários aspetos da plataforma Azure, desde a colocação de domínio de falha/atualização até ao isolamento da rede até à monitorização da integração.

Passos seguintes

Este artigo forneceu uma introdução aos Centros de Eventos para Kafka. Para saber mais, consulte o guia de desenvolvimento apache Kafka para o Azure Event Hubs.