Quando você deve considerar adotar o Apache Kafka?

Por 쉬었음.com

O Apache Kafka é uma plataforma distribuída de streaming de eventos que vale considerar quando vários sistemas precisam consumir os mesmos eventos de forma independente e o histórico de eventos precisa ser retido por algum tempo para poder ser lido novamente mais tarde. Em vez de escolhê-lo simplesmente porque é necessário processamento assíncrono, é melhor avaliar se você precisa de múltiplas assinaturas, processamento de alto volume, reprocessamento e tolerância a falhas em conjunto. kafka.apache.org

O Kafka costuma ser descrito como uma "fila de mensagens", mas esse rótulo, por si só, não explica completamente seu principal valor. Ele se destaca ao registrar como eventos os fatos ocorridos em um sistema — como a criação de um pedido, a conclusão de um pagamento, uma ação de cliente ou um log do sistema — e ao permitir que várias aplicações e sistemas de dados os leiam em seu próprio ritmo. Em contrapartida, se um serviço pequeno só precisa processar uma vez um tipo de tarefa em segundo plano, a complexidade operacional do Kafka pode superar seus benefícios.

Este artigo primeiro define os problemas que o Kafka resolve e, em seguida, examina os sinais que aumentam o valor de sua adoção e os trade-offs envolvidos em seu projeto e operação.

Que tipo de plataforma é o Kafka?

O Kafka opera em torno de tópicos que registram eventos. Um evento é um registro de dados que representa um fato ocorrido em um sistema, como "um pedido foi criado", "um usuário visualizou um produto" ou "a temperatura de um sensor foi medida". As aplicações que gravam eventos são chamadas de produtores, enquanto as aplicações que leem e processam eventos são chamadas de consumidores. kafka.apache.org

Os produtores publicam eventos em tópicos, e os consumidores assinam e leem os tópicos de que precisam. Os produtores não precisam saber diretamente quem lê seus eventos. Mesmo que um serviço de análise, notificações ou indexação de busca seja adicionado depois, o serviço de pedidos pode, em princípio, publicar o mesmo evento de pedido sem adicionar continuamente código de integração separado para cada sistema. Isso é baixo acoplamento entre produtores e consumidores. kafka.apache.org

Além disso, os eventos do Kafka não desaparecem imediatamente depois que um consumidor os lê. Eles são armazenados de acordo com políticas de retenção no nível do tópico, enquanto os consumidores gerenciam posições que indicam até onde já leram. Isso permite que um novo consumidor leia registros históricos ou que um consumidor existente reprocese a partir de um ponto específico após a correção de um bug. kafka.apache.org

Por esse motivo, é mais útil entender o Kafka como uma plataforma que "mantém um histórico de eventos compartilhável" do que como uma que apenas "entrega mensagens". Retenção não significa manter os dados para sempre; a duração real da retenção deve ser definida com base nas políticas dos tópicos e no planejamento da capacidade de armazenamento.

Como os componentes principais trabalham juntos?

Distinguir os principais componentes do Kafka facilita as decisões de adoção e a análise de incidentes.

ComponenteFunçãoO que considerar ao decidir adotar
TópicoUm fluxo lógico que agrupa eventos de natureza semelhanteÉ preciso definir o significado do evento, a duração da retenção e as permissões de acesso.
PartiçãoUma unidade de log ordenado que divide um tópicoTorna-se a unidade de throughput, paralelismo e garantias de ordenação.
ProdutorUma aplicação que grava eventos em um tópicoÉ preciso definir chaves de evento e o comportamento de repetição em caso de falha.
ConsumidorUma aplicação que lê eventos de um tópicoÉ preciso projetar para processamento duplicado, lag e recuperação de erros.
Grupo de consumidoresUm conjunto de consumidores que divide o trabalhoAs partições são divididas entre consumidores do mesmo grupo.
BrokerUm servidor Kafka que armazena e atende eventosÉ a unidade operacional para replicação, domínios de falha e capacidade de armazenamento.

Um tópico é dividido em uma ou mais partições. Uma partição é um log de eventos ordenado, e o Kafka usa várias partições para paralelizar leituras e gravações. Portanto, o número de partições não é apenas um valor de configuração; é uma decisão de projeto que reflete, ao mesmo tempo, o throughput desejado, o paralelismo dos consumidores e os requisitos de ordenação. kafka.apache.org

Um grupo de consumidores é um conjunto de instâncias de consumidores que executam a mesma tarefa. Por exemplo, se várias instâncias de consumidores carregam eventos de pedidos em um data warehouse, elas podem formar um grupo. Dentro do grupo, cada partição pode ser atribuída a um consumidor para dividir a carga de processamento. Em contraste, um serviço de notificações e um serviço de análise pertencem a grupos diferentes; assim, cada um pode ler os mesmos eventos de pedido de modo independente. kafka.apache.org

Essa estrutura favorece a escalabilidade, mas ter mais consumidores ativos em um grupo do que partições não significa que todos poderão processar mais partições simultaneamente. Não se deve esperar que o paralelismo cresça sem limite apenas aumentando o número de instâncias. Desde o início, o planejamento de partições precisa considerar conjuntamente a distribuição real das chaves e as necessidades futuras de escala.

Quais problemas tornam o Kafka mais adequado?

O sinal mais forte para adoção é uma situação em que vários sistemas precisam consumir um mesmo evento para finalidades diferentes e em velocidades diferentes. O que importa não é o número de consumidores em si, mas se os consumidores precisam evoluir independentemente do produtor.

Considere um sistema de comércio eletrônico no qual um pedido é criado. Inicialmente, talvez seja suficiente atualizar apenas o banco de dados de pedidos. Mais tarde, podem ser adicionadas reserva de estoque, fluxos de pagamento, notificações ao cliente, detecção de fraude, atualizações de dados de busca e recomendação e carregamento para análises. Se cada capacidade continuar se conectando ao serviço de pedidos por meio de chamadas síncronas, a latência ou a falha de uma função pode afetar o fluxo de processamento de pedidos, e as relações de integração podem se tornar complexas.

Nesse caso, o serviço de pedidos pode publicar um evento order created, enquanto cada sistema downstream lê os eventos de que precisa por meio de um grupo de consumidores separado. Um caso de uso central do Kafka é a capacidade de adicionar novos consumidores sem modificar diretamente o produtor existente. kafka.apache.org

As situações a seguir merecem avaliação especial:

  • Há eventos centrais, como alterações de status de pedidos, pagamentos ou associações, que vários sistemas de negócio consultam.
  • Dados como cliques de usuários, visualizações de páginas, logs operacionais ou medições se acumulam continuamente.
  • Análises, notificações, indexação e carregamento de data warehouse precisam, cada um, dos mesmos eventos de origem.
  • O fluxo de produção precisa continuar mesmo quando os consumidores têm velocidades de processamento e pontos de recuperação diferentes após falhas.
  • Quando surge um novo caso de uso, conectar diretamente o serviço de origem a cada sistema downstream é trabalhoso.

Qualquer uma dessas condições, isoladamente, não significa necessariamente que o Kafka é obrigatório. Mas, se várias se aplicam ao mesmo tempo e cada fluxo de dados tende a crescer, uma arquitetura de streaming de eventos pode oferecer mais benefícios do que integrações ponto a ponto simples.

Como o Kafka absorve alto volume e picos acentuados?

O Kafka é projetado para distribuir leituras e gravações de eventos por meio de partições, portanto pode ser usado para fluxos de dados que geram continuamente grandes quantidades de eventos. Exemplos típicos incluem agregação de logs, rastreamento de atividade de usuários, métricas de monitoramento, medições de IoT e eventos transacionais. kafka.apache.org

O papel do Kafka aqui é reduzir o acoplamento que exige que as velocidades de produção e consumo coincidam sempre. Por exemplo, se os eventos aumentarem muito em determinado período, os consumidores talvez não consigam processar todos imediatamente. Se os eventos forem retidos, os consumidores poderão alcançar o acúmulo. Isso dá aos consumidores margem para ajustar sua taxa de processamento de forma independente, sem bloquear os produtores.

Isso não significa que o lag desaparece. Em vez disso, significa que o lag pode ser gerenciado como um backlog acumulado de eventos registrados. O lag do consumidor é uma métrica operacional que mostra o quanto um consumidor está atrasado em relação aos eventos mais recentes. Se o lag continuar aumentando, devem ser investigados o desempenho do consumidor, as dependências externas, a distribuição de partições e as repetições após erros. O Kafka fornece métricas de monitoramento baseadas em JMX, e os ambientes de produção também precisam considerar a segurança dos caminhos de acesso ao monitoramento. kafka.apache.org

Ao avaliar requisitos de throughput, é melhor separar as perguntas a seguir em vez de dizer vagamente que "o tráfego é alto":

  1. Quantos eventos ocorrem por segundo ou em cada período?
  2. Quais são os tamanhos médio e máximo de um único evento?
  3. Quanto tempo duram os picos?
  4. Quanto lag de consumidor é aceitável?
  5. Com que rapidez o backlog precisa ser processado após uma interrupção?
  6. Por quanto tempo os eventos precisam ser retidos?

Responder a essas perguntas revela que o número de partições, a capacidade de armazenamento, a replicação, a escala dos consumidores e o tempo de reprocessamento são preocupações interligadas. O Kafka fornece uma base para alto throughput, mas o desempenho e o custo reais variam conforme o tamanho dos eventos, a assimetria das chaves, as políticas de retenção e os gargalos na lógica dos consumidores.

Por que o reprocessamento é uma razão importante para adotar o Kafka?

O processamento em tempo real é o trabalho que produz um resultado imediatamente após a chegada de um evento. Exemplos incluem atualizar o estoque após um pedido, detectar transações que atendem a determinadas condições ou agregar métricas por minuto. Porém, reprocessar dados históricos pode ser um requisito tão importante quanto o processamento em tempo real.

O reprocessamento é necessário por muitas razões. Depois de corrigir um bug no código do consumidor, é possível recriar resultados ausentes ou calculados incorretamente. Quando novas regras de análise são introduzidas, é possível criar dados derivados a partir do histórico de eventos existente. Se o consumo parar devido a uma falha, é possível recuperar lendo novamente a partir da última posição processada. No Kafka, os eventos não são removidos imediatamente após o consumo e podem ser relidos dentro da política de retenção. kafka.apache.org

Por exemplo, suponha que eventos de comportamento de clientes tenham sido usados inicialmente apenas para agregar contagens diárias de visitantes. Se mais tarde for necessária uma análise de conversão por canal de aquisição, um grupo de consumidores separado poderá ler os eventos históricos e gerar novos resultados analíticos, desde que os campos necessários estejam incluídos nos eventos e o período de retenção ainda esteja ativo. O trabalho pode ser isolado sem interromper o consumidor de agregação existente ou executar consultas de grande escala no banco de dados do serviço de origem.

No entanto, a possibilidade de reprocessar não resolve, por si só, problemas de qualidade dos dados. Se os eventos não tiverem identificadores obrigatórios, timestamps de ocorrência ou informações de versão, ou se o significado do esquema tiver mudado sem gerenciamento de compatibilidade, será difícil produzir resultados confiáveis mesmo que os dados históricos possam ser lidos. Além disso, a necessidade de reprocessar dados mais antigos que o período de retenção talvez não seja atendida apenas por tópicos do Kafka. Portanto, se o reprocessamento for um motivo para a adoção, determine primeiro "o que será reproduzido, por quanto tempo e com qual significado".

O Kafka também pode conectar bancos de dados e sistemas externos?

O Kafka pode ser usado não apenas para entregar eventos entre serviços, mas também como fluxo central de pipelines de dados. Change data capture (CDC) é uma abordagem para enviar a um fluxo de dados as alterações que ocorrem em um banco de dados, e pode ser considerada quando mudanças nos dados operacionais precisam ser refletidas em análises, busca ou outros serviços. O Kafka Connect fornece uma API e um modelo de conectores para integrações recorrentes de entrada e saída de dados com sistemas externos. kafka.apache.org

Exemplos em que essa configuração pode ser útil incluem:

  • Enviar continuamente alterações de um banco de dados operacional para um armazenamento analítico.
  • Coletar logs e métricas de várias aplicações em um fluxo compartilhado.
  • Refletir dados gerados em um sistema em um índice ou tabela derivada em outro armazenamento.
  • Criar fluxos contínuos de dados entre ambientes on-premises e em nuvem.

O uso de conectores não elimina diferenças nos modelos de dados, semântica de exclusão, problemas de ordenação, gerenciamento de acesso ou limites de gravação dos sistemas de destino. Em particular, ao usar alterações de banco de dados como eventos, é preciso distinguir entre o fato de que "uma linha mudou" e o evento de negócio de que "um pedido foi confirmado". O primeiro está mais próximo de uma mudança de armazenamento, enquanto o segundo é um evento de negócio com significado de domínio. Tratá-los como se fossem iguais pode fazer com que os consumidores dependam excessivamente da estrutura de armazenamento.

Portanto, adotar o Kafka para pipelines de dados é mais confiável quando faz mais do que reduzir o número de conexões — quando também esclarece os proprietários dos dados, os esquemas e a responsabilidade pelas mudanças.

Em que medida a ordenação é garantida e por que o projeto das chaves importa?

No Kafka, a ordenação dos eventos é garantida dentro de uma partição, e não em todo um tópico. Várias partições permitem processamento paralelo, mas não há uma única ordem global entre elas. kafka.apache.org

Por exemplo, se o status de um pedido precisar ser processado na sequência created, payment completed e shipping started, você poderá usar o ID do pedido como chave para que os eventos do mesmo pedido sejam registrados na mesma partição. Isso permite usar a ordem dos registros daquele pedido como unidade. Alterações de status do cliente podem ser projetadas de forma semelhante usando o ID do cliente como chave.

Por outro lado, se todos os eventos de pedido tiverem de ser processados um por vez em ordem cronológica geral, uma escolha próxima de uma única partição pode ser efetivamente necessária. Nesse caso, a ordenação pode se tornar mais simples, mas a capacidade de processamento paralelo fica limitada. Ordenação global e alto paralelismo não são propriedades que se pode obter juntas sem limite.

A escolha da chave apresenta outro problema. Se um cliente ou dispositivo específico gerar uma quantidade excepcionalmente grande de eventos, essa chave poderá se concentrar em uma partição. Isso pode ser considerado assimetria de chaves, e apenas alguns consumidores podem ficar excessivamente ocupados. Portanto, as chaves devem representar a unidade de negócio que exige ordenação, mas também devem ser avaliadas para garantir que não criem assimetria excessiva na distribuição de dados esperada.

Ao documentar requisitos de ordenação, não pare em "a ordenação importa". É melhor especificá-los da seguinte forma:

  • Dentro de qual escopo de identificador a ordenação é necessária?
  • É necessária a ordem por tempo do evento ou a ordem de gravação do registro?
  • Como eventos que chegam atrasados serão tratados?
  • Que erro de negócio ocorre se os eventos estiverem fora de ordem?
  • A ordenação global é necessária mesmo ao custo de menor paralelismo?

As respostas definem a separação de tópicos, as chaves, as contagens de partições e a lógica dos consumidores.

Como devem ser entendidos o processamento duplicado e o processamento exatamente uma vez?

Os consumidores do Kafka precisam de projetos que assumam, por padrão, processamento pelo menos uma vez, considerando falhas e repetições. Por exemplo, se um consumidor terminar de processar um evento, mas parar antes de registrar sua posição de processamento, ele poderá ler o mesmo evento novamente após a recuperação. Portanto, o processamento duplicado do mesmo evento é possível. kafka.apache.org

A solução prática é tornar a lógica do consumidor idempotente. Idempotência é a propriedade de produzir o mesmo resultado final mesmo quando a mesma operação é realizada várias vezes. Por exemplo, uma operação como set the status of order 123 to delivered pode ser projetada para que a repetição da mesma atualização de status não altere materialmente o resultado. Em contraste, uma operação que unconditionally adds 1,000 points pode produzir um resultado diferente se receber o mesmo evento duas vezes, portanto requer uma estratégia de desduplicação, como registrar IDs de eventos ou usar restrições de unicidade no armazenamento de destino.

Ao conectar leitura, processamento e gravação dentro de tópicos do Kafka, o Kafka oferece suporte a configurações de processamento exatamente uma vez por meio de transações e do nível de isolamento read_committed. No entanto, isso não deve ser entendido como se todo efeito externo ocorresse automaticamente apenas uma vez. Efeitos colaterais fora do Kafka, como atualizações em bancos de dados externos, envio de e-mails ou chamadas de API de pagamento, exigem coordenação com o sistema de destino e projeto separado. kafka.apache.org

Portanto, antes da adoção, faça as seguintes perguntas para cada consumidor:

  • O que acontece se o mesmo evento for processado duas vezes?
  • Cada evento tem um ID que pode ser usado para detectar duplicatas?
  • O armazenamento de resultados evita duplicatas ou oferece suporte a atualizações seguras?
  • Quais são os critérios de repetição quando uma chamada externa falha ou sua resposta não é clara?
  • Como efeitos colaterais já executados serão tratados durante o reprocessamento?

Se o Kafka for adotado sem responder a essas perguntas, o transporte em si poderá ser confiável enquanto resultados de negócio duplicados ou inconsistentes continuam difíceis de detectar.

A tolerância a falhas e a durabilidade são garantidas automaticamente?

O Kafka pode ser configurado para se preparar para falhas de brokers por meio da replicação de partições de tópicos. Isso pode ser uma grande vantagem para fluxos de dados em que partições replicadas, operação contínua durante falhas de brokers e distribuição de carga entre muitos consumidores são importantes. kafka.apache.org

No entanto, a conclusão de que "os dados nunca podem ser perdidos porque usamos Kafka" não está correta. A durabilidade e a disponibilidade reais dependem do fator de replicação, das configurações de confirmação do produtor, do escopo de falhas que podem ocorrer simultaneamente, das políticas de retenção e dos procedimentos operacionais. Mesmo com réplicas, os resultados podem divergir das expectativas se elas estiverem no mesmo domínio de falha, se configurações importantes não atenderem ao nível exigido ou se os procedimentos de recuperação não tiverem sido validados pelos operadores. kafka.apache.org

É útil registrar explicitamente os requisitos de tolerância a falhas. Por exemplo: "A produção e o consumo de eventos de pedido devem continuar se um broker ficar indisponível", "Duplicatas são aceitáveis após falha de consumidor, mas omissões não são" ou "Eventos dentro de um período especificado devem ser reprocessáveis". Esses requisitos definem não apenas replicação e confirmações, mas também idempotência dos consumidores, monitoramento, capacidade de armazenamento e exercícios de recuperação.

Como o histórico reprocessável pode se tornar um ativo de dados importante, deve-se avaliar separadamente se os tópicos contêm informações pessoais ou dados comerciais sensíveis. O controle de acesso e a segurança das interfaces operacionais não são tarefas posteriores separadas do projeto do fluxo de dados. As operações do Kafka também exigem configurações de segurança para acesso administrativo, incluindo o monitoramento. kafka.apache.org

O Kafka é sempre melhor do que uma fila de trabalho simples ou uma API síncrona?

Não. O Kafka não é uma substituição automática para todo requisito assíncrono. Se a necessidade for mais próxima de "converter uma imagem uma vez", "gerar um relatório e retornar apenas o resultado" ou "fazer com que um consumidor pegue e processe um trabalho", e retenção longa, múltiplas assinaturas e reprocessamento não forem centrais, uma fila de trabalho mais simples ou um serviço gerenciado poderá ser mais adequado em termos de custo e sobrecarga operacional. Os principais pontos fortes do Kafka surgem quando fluxos de eventos em grande escala, vários consumidores independentes e reutilização de histórico retido se combinam. kafka.apache.org

APIs síncronas também têm um papel diferente. Uma solicitação em que um usuário clica em um botão e precisa de um resultado imediato de sucesso ou falha se encaixa naturalmente em uma API de solicitação-resposta. Depois que essa solicitação é concluída, o fluxo de informar sistemas downstream sobre o fato pode ser separado em eventos. Em outras palavras, em vez de escolher apenas entre chamadas síncronas e Kafka, frequentemente é mais adequado usar APIs para interações de usuários e eventos para fan-out assíncrono downstream.

A comparação a seguir pode simplificar a decisão:

Necessidade principalAbordagem a avaliar primeiroCondições em que o Kafka se torna especialmente vantajoso
Processar um trabalho uma vezFila de trabalho simples ou serviço assíncrono gerenciadoQuando vários sistemas independentes precisam ler o mesmo resultado de trabalho ou evento
Solicitação que exige resultado imediatoAPI síncronaQuando trabalhos downstream diversos precisam se ramificar de forma assíncrona após a conclusão da solicitação
Transferir dados entre sistemasIntegração direta ou abordagem de arquivo/loteQuando fluxo contínuo, vários destinos e requisitos de reprocessamento coexistem
Coletar dados de logs, comportamento ou mediçõesFerramentas de coleta e armazenamentoQuando vários consumidores precisam processar fluxos de alto volume de forma independente
Gerenciar o histórico de mudanças de estadoBanco de dados de negócioQuando os eventos precisam ser reproduzidos para reconstruir o estado ou dados derivados

Esta tabela não é uma regra absoluta de seleção de produtos. A plataforma existente da equipe, a disponibilidade de serviços gerenciados, as políticas de segurança e a equipe operacional também afetam a decisão. O ponto principal é a natureza do fluxo de dados que você está tentando resolver, e não uma lista de recursos.

O que precisa ser preparado para operação e governança?

Adotar o Kafka não se limita a adicionar uma biblioteca à aplicação. Também exige um modelo operacional para gerenciar continuamente tópicos, partições, replicação, retenção, permissões de acesso, monitoramento e capacidade. O Kafka fornece métricas JMX, mas as informações operacionais só criam valor real quando você determina quais métricas acionam alertas, quem responde e como ocorre a recuperação. kafka.apache.org

Primeiro, os contratos de eventos precisam ser gerenciados. Um contrato de evento inclui não apenas nomes de campos e tipos de dados, mas também o significado de negócio de cada campo, se ele é opcional, como alterações de versão são tratadas e a distinção entre o momento de produção e o momento de ocorrência. São necessários padrões de compatibilidade para que os consumidores não operem incorretamente de modo silencioso quando um produtor remove um campo ou muda seu significado.

Em seguida, as políticas dos tópicos precisam estar claras. Para cada tópico, é necessário decidir o seguinte:

  • Quais eventos ele contém e quem é responsável por eles.
  • Qual é o período de retenção e quais são os critérios de capacidade de armazenamento.
  • Quais requisitos de ordenação e throughput determinaram a contagem de partições e a chave.
  • Que nível de falha a replicação e as confirmações do produtor devem suportar.
  • Quem pode produzir e consumir, e como dados sensíveis são protegidos.
  • Em qual nível de lag do consumidor começam a investigação e a resposta.

O planejamento de capacidade também é importante. Períodos de retenção mais longos ou maior replicação aumentam os requisitos de armazenamento. Se os consumidores precisarem conseguir reprocessar após ficarem parados por muito tempo, o histórico poderá precisar ser retido de acordo. Por outro lado, retenção curta pode reduzir custos, mas limita a faixa de dados históricos disponível para recuperação de interrupções ou adição de novos consumidores. Essa escolha define não apenas custos, mas também o escopo das capacidades do produto e a recuperabilidade.

Em organizações com responsabilidade operacional indefinida, uma plataforma Kafka compartilhada pode, em vez disso, aumentar problemas de dependência. Alinhar quais mudanças e incidentes são responsabilidade dos proprietários de tópicos, operadores da plataforma, responsáveis pela segurança e equipes de desenvolvimento dos consumidores é tão importante quanto a configuração técnica.

Quais perguntas devem orientar a decisão antes da adoção?

A pergunta que melhor diferencia se deve adotar o Kafka não é "Precisamos de mensagens assíncronas?". Uma pergunta mais precisa é: Vários consumidores independentes precisam ler continuamente um histórico de eventos em grande escala e reprocessá-lo após lag ou falha? Se a resposta for claramente sim, seus requisitos provavelmente estão alinhados às características centrais do Kafka. kafka.apache.orgkafka.apache.org

Você pode usar a seguinte lista de verificação ao iniciar discussões sobre adoção:

  1. Múltiplos consumidores: Vários sistemas, atualmente ou em um futuro próximo, precisam usar o mesmo evento de maneira independente?
  2. Valor do histórico: Os eventos precisam ser retidos após o consumo e relidos para correções de bugs, auditorias ou novas análises?
  3. Escala de processamento: A ingestão sustentada de alto volume ou o tráfego de pico exige desacoplar produção e consumo?
  4. Escopo de ordenação: O problema pode ser resolvido com ordenação por uma chave, como cliente ou pedido, em vez de ordenação global?
  5. Tratamento de duplicatas: Cada consumidor consegue processar com segurança ou identificar eventos duplicados?
  6. Gerenciamento de contratos: Existem responsáveis e processos para gerenciar mudanças nos esquemas e significados dos eventos?
  7. Prontidão operacional: Há um responsável que possa observar e responder a lag, capacidade de armazenamento, falhas de brokers, permissões e reprocessamento?
  8. Comparação de alternativas: O requisito poderia ser atendido de forma mais simples com distribuição de trabalhos para um único consumidor ou somente solicitação-resposta?

Nem todos os itens precisam estar perfeitos desde o início para adotar o Kafka. Porém, se as necessidades dos itens 1 a 5 forem fortes, enquanto a preparação dos itens 6 e 7 estiver ausente, poderá haver uma grande lacuna entre a possibilidade técnica e um sistema operável. Pode ser útil validar primeiro contratos de eventos, tratamento de duplicatas, observação de lag e reprocessamento em um fluxo de dados de escopo pequeno.

Conclusão: o Kafka é poderoso quando o histórico de eventos precisa ser compartilhado

O Apache Kafka não é apenas uma ferramenta para mover mensagens de forma assíncrona; é uma plataforma que retém fluxos de eventos compartilhados por vários sistemas e permite que eles consumam esses fluxos de forma independente. Seu valor de adoção aumenta em ambientes que precisam de múltiplas assinaturas dos mesmos eventos, processamento paralelo de fluxos de dados de alto volume, recuperação após lag e reprocessamento conjunto de registros históricos. kafka.apache.orgkafka.apache.org

Em contrapartida, alternativas mais simples podem ser mais adequadas para requisitos que transferem trabalho único a um único consumidor, solicitações centradas em respostas imediatas ou fluxos pequenos em que a sobrecarga operacional deve ser minimizada. Ao escolher o Kafka, avalie não apenas o throughput, mas também se você está pronto para gerenciar ordenação no nível de partição, processamento duplicado, políticas de retenção, contratos de eventos, segurança e observabilidade. Quanto mais essas condições estiverem presentes, mais o Kafka poderá se tornar uma base para reduzir o acoplamento entre serviços e expandir o uso dos dados.

Perguntas frequentes

Como o Kafka é diferente de uma fila de mensagens típica?

O Kafka não foi projetado apenas para a simples distribuição de trabalho, em que as mensagens desaparecem imediatamente após o consumo. Ele retém eventos em tópicos, permite que vários grupos de consumidores os leiam de forma independente e possibilita que os consumidores releiam posições anteriores dentro do período de retenção. Isso o torna especialmente adequado quando vários sistemas precisam distribuir dados e reprocessá-los.

A ordenação dos eventos é sempre garantida no Kafka?

Não. A ordenação é garantida dentro de cada partição, e não em todo um tópico. Para eventos cuja ordem é importante dentro de uma unidade, como o mesmo cliente ou pedido, a abordagem comum é usar a mesma chave para que sejam enviados à mesma partição. Se for estritamente necessária uma única ordem para todos os eventos, a capacidade de processamento paralelo fica limitada.

O Kafka garante que as mensagens sejam processadas exatamente uma vez, sem duplicatas?

Como falhas de consumidores e condições semelhantes precisam ser consideradas, os projetos de consumidores devem, em geral, assumir que duplicatas são possíveis. Ao ler, processar e gravar dentro do Kafka, o processamento exatamente uma vez pode ser configurado com transações e `read_committed`; no entanto, efeitos colaterais como atualizações em bancos de dados externos ou chamadas de API não são processados exatamente uma vez automaticamente.

Que tipos de equipes devem considerar adotar o Kafka desde o início?

Há um forte caso para avaliação quando vários sistemas independentes usam os mesmos eventos, o reprocessamento de eventos históricos e o tratamento contínuo de grandes fluxos de dados são importantes, e há responsáveis claros para operar políticas de tópicos, esquemas, monitoramento e resposta a incidentes. Se a necessidade for apenas encaminhar trabalho simples a um único consumidor, geralmente faz mais sentido comparar primeiro alternativas mais simples.