Princípios básicos de Kafka
Kafka é um serviço de log de commit de código aberto, distribuído, particionado e replicado. Kafka é uma mensagem de publicação-assinatura, repensada como um log de commit distribuído. Ele fornece recursos semelhantes ao Serviço de Mensagens do Java (JMS), mas outro design. Possui resistência a mensagens, alta taxa de transferência, métodos distribuídos, suporte a vários clientes e tempo real. Aplica-se ao consumo de mensagens on-line e off-line, como coleta regular de mensagens, rastreamento de atividade do site, agregação de dados de operação do sistema estatístico (dados de monitoramento) e coleta de logs. Esses cenários envolvem grandes quantidades de coleta de dados para serviços de Internet.
Estrutura de Kafka
Os produtores publicam dados sobre os tópicos e os consumidores assinam os tópicos e consomem mensagens. Um broker é um servidor em um cluster do Kafka. Para cada tópico, o cluster do Kafka mantém partições para escalabilidade, paralelismo e tolerância a falhas. Cada partição é uma sequência ordenada e imutável de mensagens que é continuamente anexada a - um log de commit. A cada mensagem em uma partição é atribuído um ID sequencial, que é chamado deslocamento.
Nome |
Descrição |
---|---|
Broker |
Um broker é um servidor em um cluster do Kafka. |
Tópico |
Um tópico é uma categoria ou nome do feed no qual as mensagens são publicadas. Um tópico pode ser dividido em várias partições, que podem atuar como uma unidade paralela. |
Partição |
Uma partição é uma sequência ordenada e imutável de mensagens que é continuamente anexada a - um log de commit. As mensagens nas partições recebem um número de identificação sequencial chamado offset que identifica exclusivamente cada mensagem dentro da partição. |
Produtor |
Produtores publicam mensagens em um tópico do Kafka. |
Consumidor |
Os consumidores assinam tópicos e processam o feed de mensagens publicadas. |
Figura 2 mostra as relações entre os módulos.
Os consumidores se rotulam com um nome de grupo de consumidores e cada mensagem publicada em um tópico é entregue a uma instância de consumidor dentro de cada grupo de consumidores inscrito. Se todas as instâncias de consumidores pertencerem ao mesmo grupo de consumidores, as cargas serão distribuídas uniformemente entre os consumidores. Como mostrado na figura anterior, Consumidor1 e Consumidor2 trabalham no modo de compartilhamento de carga; Consumidor3, Consumidor4, Consumidor5 e Consumidor6 trabalham no modo de compartilhamento de carga. Se todas as instâncias de consumidores pertencem a diferentes grupos de consumidores, as mensagens são transmitidas para todos os consumidores. Conforme mostrado na figura anterior, as mensagens no Tópico 1 são transmitidas para todos os consumidores no Grupo de Consumidores1 e no Grupo de Consumidores2.
Para detalhes sobre a arquitetura e os princípios de Kafka, veja https://kafka.apache.org/24/documentation.html.
Princípio
- Confiabilidade da mensagem
Quando um broker de Kafka recebe uma mensagem, ele armazena a mensagem em um disco persistentemente. Cada partição de um tópico tem várias réplicas armazenadas em diferentes nós do broker. Se um nó estiver com defeito, as réplicas em outros nós poderão ser usadas.
- Alta taxa de transferência
Kafka fornece alta taxa de transferência das seguintes maneiras:
- As mensagens são gravadas em discos em vez de serem armazenadas em cache na memória, utilizando totalmente o desempenho sequencial de leitura e gravação dos discos.
- O uso de cópia zero elimina as operações de I/O.
- Os dados são enviados em lotes, melhorando a utilização da rede.
- Cada tópico é dividido em várias partições, o que aumenta o processamento simultâneo. Operações simultâneas de leitura e gravação podem ser realizadas entre vários produtores e consumidores. Os produtores enviam mensagens para partições especificadas com base no algoritmo usado.
- Mecanismo de assinatura-notificação de mensagem
Os consumidores se inscrevem em tópicos interessados e consomem dados no modo pull. Os consumidores podem escolher o modo de consumo, como consumo em lote, consumo repetido e consumo a partir do final, e controlar a velocidade de extração da mensagem com base na situação real. Os consumidores precisam manter os registros de consumo por si mesmos.
- Escalabilidade
Quando nós de broker são adicionados para expandir a capacidade do cluster de Kafka, os brokers recém-adicionados se registram no ZooKeeper. Depois que o registro é bem sucedido, os procedimentos e os consumidores podem sentir a mudança em tempo hábil e fazer ajustes relacionados.
Recursos de código aberto
- Confiabilidade
Métodos de processamento de mensagens como At-Least Once, At-Most Once e Exactly Once são fornecidos. O status de processamento de mensagens é mantido pelos consumidores. Kafka precisa trabalhar com a camada de aplicação para implementar Exactly Once.
- Alta taxa de transferência
Alta taxa de transferência é fornecida para publicação e assinatura de mensagens.
- Persistência
As mensagens são armazenadas em discos e podem ser usadas para consumo em lotes e programas de aplicações em tempo real. A persistência e a replicação de dados evitam a perda de dados.
- Distribuição
Um sistema distribuído é fácil de ser expandido externamente. Todos os produtores, brokers e consumidores suportam a implementação de vários clusters distribuídos. Os sistemas podem ser dimensionados sem interromper a execução do software ou desligar as máquinas.
UI do Kafka
A interface do usuário do Kafka fornece serviços da Web do Kafka, exibe informações básicas sobre módulos funcionais, como brokers, tópicos, partições e consumidores em um cluster do Kafka e fornece entradas de operação para comandos comuns do Kafka. A interface do usuário do Kafka substitui o Kafka Manager para fornecer serviços da Web seguros do Kafka que atendam às especificações de segurança.
Você pode executar as seguintes operações na interface do usuário do Kafka:
- Verifique o status do cluster (tópicos, consumidores, deslocamentos, partições, réplicas e nós).
- Redistribua partições no cluster.
- Crie um tópico com configurações de tópicos opcionais.
- Exclua um tópico (suportado quando delete.topic.enable é definido como true para o serviço Kafka).
- Adicione partições a um tópico existente.
- Atualize configurações para um tópico existente.
- Opcionalmente, ative a sondagem JMX para métricas no nível do broker e no nível do tópico.