Escalabilidade: O Engano da Resiliência em Microserviços com Kafka

Quando Kafka Vira Bengala Arquitetural

O erro clássico: achar que Kafka é cura universal para escalabilidade. **Muita gente coloca Kafka onde só precisava de um simples “retry” assíncrono**. Resultado? Over-engineering e mais uma stack que ninguém no time sabe operar.

O hype de que Kafka = resiliência cria a falsa sensação de que microserviços ficam “intocáveis”. Só que resiliência não nasce do broker — nasce do design. Se o serviço é podre, Kafka só empacota essa podridão em eventos bonitos.

Kafka Resolve? Resolve. Mas Só se o Problema For Dele.

A solução pragmática: use Kafka quando você precisa de throughput alto, eventos imutáveis, reprocessamento e pipelines de dados. Não para RPC glorificado ou como substituto de comunicação entre microserviços que só precisam responder rápido.

Quer resiliência real? Circuit breaker, idempotência e design orientado ao domínio. Kafka entra quando o domínio pede streaming, não quando o time quer parecer “cloud native”.

Implementação de Sênior: Processamento Idempotente com Kafka

Vamos ao que importa: código que evita tragédias. Consumidor Kafka com idempotência real usando chave de negócio + store simples.

using Confluent.Kafka;
using Dapper;
using Npgsql;

var config = new ConsumerConfig {
    GroupId = "pedido-processador",
    BootstrapServers = "kafka:9092",
    AutoOffsetReset = AutoOffsetReset.Earliest
};

using var consumer = new ConsumerBuilder<string, string>(config).Build();
consumer.Subscribe("pedido-criado");

while (true)
{
    var cr = consumer.Consume();
    var idEvento = cr.Message.Key;

    using var conn = new NpgsqlConnection(envConnString);

    // Bloqueia repetição de evento
    var exists = await conn.ExecuteScalarAsync<bool>(
        "select exists (select 1 from eventos_processados where id = @id)", 
        new { id = idEvento }
    );

    if (exists) continue;

    // Processa pedido
    var payload = JsonSerializer.Deserialize<PedidoCriado>(cr.Message.Value);
    await ProcessarPedido(payload);

    // Marca como processado
    await conn.ExecuteAsync(
        "insert into eventos_processados (id) values (@id)",
        new { id = idEvento }
    );
}

Simples, direto e evita o clássico bug de processar o mesmo evento três vezes em horário de pico.

O Custo da Escolha: Onde Kafka Brilha e Onde Ele Te Derruba

**Kafka é excelente onde produção de eventos é massiva. É péssimo quando sua necessidade é resposta síncrona.**

  • Você ganha reprocessamento, mas perde simplicidade operacional.
  • Você ganha throughput, mas paga com infraestrutura pesada.
  • Você ganha distribuição, mas complica debugging.

Se o problema é comunicação entre microserviços, muitas vezes um simples RabbitMQ — bem configurado — resolve com menos drama.

Direto das Trincheiras

  • Kafka não é fila. Não tente usá-lo como RabbitMQ de grife.
  • Seu microserviço não fica resiliente só porque está atrás de um tópico.
  • Se você não sabe operar Kafka em produção, você não está pronto para usá-lo.

Fontes

Kafka vs PubSub do ponto de vista gerencial : r/ExperiencedDevs,
Kafka vs RabbitMQ | gaGO.io,
‘Não use um banco de dados como uma fila’ : r/dotnet

Obrigado por acompanhar essa reflexão até o fim!

Espero que esses pontos ajudem você a tomar decisões mais lúcidas no seu próximo projeto. Não deixe de conferir outros artigos aqui no blog, onde descascamos outros hypes da nossa área.

Valeu e até a próxima! 😉

Facebook
Twitter
LinkedIn

Kafka vs RabbitMQ: a verdade nua sobre escalabilidade em microserviços

Chega de romantizar mensageria. Quando o sistema começa a chiar, fila travando e consumidor engasgando, é aí que o arquiteto leva culpa. Kafka e RabbitMQ não são mágicos, têm propósitos distintos — e escolher errado vira dívida técnica que assombra por anos. Neste artigo, trago a visão de trincheira: onde cada um brilha, onde cada um quebra, e quando abandonar o hype e focar no que realmente resolve o problema do negócio.

Banco de dados

Mensageria em Microssistemas: Quando Ela Entrega Valor — e Quando Só Aumenta Sua Dívida Técnica

A verdade nua e crua: muita gente coloca mensageria em microserviços porque viu num diagrama bonito no slide do arquiteto da moda. Só que hype não paga boleto — e muito menos salva sistema mal modelado. Aqui eu explico onde a mensageria realmente resolve dor de negócio, quando ela vira over-engineering e como implementar sem transformar sua stack em um zoológico distribuído impossível de manter.

Discussões

A Ilusão do Low‑Code: Quando a Promessa de Velocidade Destrói Sua Arquitetura

Low‑code funciona… até o dia em que você precisa entender o que realmente está acontecendo lá dentro. Como arquiteto nas trincheiras, já vi mais projetos ruírem por dependência cega em plataformas mágicas do que por falta de framework moderno. Neste artigo, vou direto à dor: o low‑code vende eficiência, mas frequentemente entrega dívida técnica embrulhada para presente. Hora de desmontar o hype e mostrar onde ele realmente funciona — e onde vira armadilha arquitetural.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *