Atena Kafka

Aplicativo Atena Kafka Dashboard — Soluevo

É uma plataforma de streaming distribuída. Ele foi desenvolvido para ser resiliente e tolerante a falhas.

Você pode obter muitos casos de uso com o Kafka; exemplos de seu uso podem ser:

  • Mensagens
  • Coleta de logs
  • Processamento de fluxo
  • etc.

Conceitos principais

Tópicos

Um tópico é para onde suas mensagens serão enviadas (produzidas). Quem quiser ler esta informação irá lê-la (consumir) a partir do tópico.
Dentro do Kafka, você pode ter quantos tópicos quiser e cada tópico contém um determinado número de partições (definidas por você ao criar o tópico). Portanto, sempre que produzir uma mensagem para um tópico, ela será gravada em uma determinada partição do tópico, selecionada aleatoriamente, a menos que uma chave seja fornecida.

Imagem Kafka

Dentro do tópico, os dados são mantidos por algum tempo. O valor padrão é 7 dias, mas pode ser estendido. Há casos em que essas mensagens são mantidas no tópico por um ano. Uma coisa importante aqui é que, após uma mensagem ser escrita em uma determinada partição, você não poderá mais alterá-la. Ser capaz de armazenar os dados por um período tão longo, permitindo reprocessar as mensagens, se necessário, é o que torna o Kafka confiável. Depois de ver alguns casos de uso em produção, posso garantir com segurança que isso poderá salvar vidas em alguns casos.

Partições

Dentro de cada partição, as mensagens serão ordenadas, recebendo um ID incremental chamado deslocamento em Kafka. Um consumidor está basicamente apontando para o último deslocamento que foi lido, sempre que uma nova mensagem é consumida, esse ponteiro avança para a próxima mensagem. Esse processo offset commité sempre incremental.

Imagem Kafka

Corretores

Ao usar o Kafka, a infraestrutura que você terá é um cluster Kafka. Esse cluster é basicamente um monte de servidores, no nosso caso, os corretores. Então, para que serve esse corretor?

Lembra quando dissemos que um tópico consiste em muitas partições? Para ser mais resiliente e lidar com falhas do servidor, cada broker conterá uma determinada partição de tópico.

Ao conectar-se a um broker (servidor Bootstrap), você está conectado a todo o cluster. Todo corretor Kafka é um servidor de inicialização que conhece todos os corretores, tópicos e partições. Quando o Cliente Kafka se conecta a um Corretor, ele recebe uma lista de todos os corretores e, eventualmente, pode se conectar a um deles, se necessário. Os corretores são identificados por um ID.

Vamos imaginar um cluster com 3 corretores e um tópico (chamado A). Para obter resiliência na entrega das mensagens, precisamos de alguma réplica da informação, certo? Apenas no caso de algo dar errado em um dos servidores.

Isso é chamado replication factorem Kafka e os tópicos devem ter um fator de replicação> 1, geralmente entre 2 e 3.

Neste exemplo, temos um fator de replicação 2, portanto, cada partição está presente em 2 intermediários. Portanto, no caso de um broker ficar indisponível, você ainda poderá ler a partição de outro broker. No entanto, se tivéssemos um fator de replicação 3, poderíamos perder dois corretores e ainda teríamos as três partições em um corretor para trabalhar.

Produtores

Para nos permitir usar o Kafka, precisamos ser capazes de ler e escrever mensagens para nossos tópicos amados, não é? Portanto, precisamos ter uma API que torne isso possível.

Os produtores são os responsáveis ​​por gravar dados nos tópicos (lembre-se de que esses dados serão realmente gravados em uma partição). Se quisermos resumir o que é um produtor, seria isso. No entanto, se tivéssemos isso na API, não seria resiliente.

Para isso, um produtor é capaz de detectar uma falha no broker e recuperar-se dessa produção para outro broker. Como já foi dito, as chaves também podem ser enviadas nas mensagens para ativar o pedido. Se nenhuma chave estiver presente, os dados serão enviados para uma partição em uma seleção round robin. No entanto, com a chave, um hash será feito com isso e a chave sempre será enviada para a partição desse hash fornecido.

Isso é para ativar a ordem nas mensagens. Uma coisa a considerar é que o número de partições nunca pode mudar, caso contrário, o mecanismo de hash mudará e a garantia não estará mais disponível para você.

Reconhecimento

É possível optar por receber acks ao produzir mensagens.

Valor de confirmaçãoResultado0 0Nenhuma confirmação é necessária1Aguarde o líder aceitartudoAs réplicas Leader + devem aceitar

Algo que vale a pena mencionar é que é possível configurar novas tentativas no Kafka, com configuração de backoff e tempo limite. Mas lembre-se, com novas tentativas, o Kafka pode enviar mensagens fora de ordem, se você tiver isso configurado, esteja ciente.

Outra coisa é que você pode alcançar produtores idempotentes:

[…] O produtor idempotente fortalece a semântica de entrega de Kafka de pelo menos uma vez para exatamente uma vez. Em particular, as novas tentativas de produtores não introduzirão mais duplicatas. […]

Consumidores

Agora chegamos ao ponto em que leremos as mensagens de um determinado tópico. Os consumidores sabem de qual broker ler e cada consumidor lerá de uma determinada partição (ou várias partições também, mais sobre isso posteriormente). Por não ter vários consumidores nas mesmas partições, o Kafka garante que a mensagem não será processada por dois consumidores. Aqui está a API para referência.

Grupos de Consumidores

Os consumidores estão vinculados a um grupo de consumidores. Como podemos ver na imagem acima, cada servidor contém Partições (P #, onde # é o número da partição) e cada Consumidor pertence a um determinado Grupo de Consumidores. Cada consumidor do Grupo de Consumidores A lê em dois tópicos, mas cada consumidor do Grupo de Consumidores B lê em uma única partição. Quando cada consumidor lê de uma única partição e você envia mensagens com chaves, pode garantir que os consumidores leiam a mensagem da partição da qual lê de maneira ordenada. Importante, se você tiver mais consumidores do que partições, alguns consumidores estarão inativos.

Soluevo

Soluevo Soluções em Software

Soluevo

Somos um time de desenvolvedores e designers em constante busca da solução mais eficaz para sua empresa. Explanamos aqui curiosidades e nosso método.

Soluevo Soluções em Software

Written by

Somos um time de desenvolvedores e designers em constante busca da solução mais eficaz para sua empresa. Explanamos aqui curiosidades e nosso método.

Soluevo

Somos um time de desenvolvedores e designers em constante busca da solução mais eficaz para sua empresa. Explanamos aqui curiosidades e nosso método.