📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados na Especialização em Backend com Go & Gin. Recomendado revisar antes de iniciar.

🐹 Arquitetura Orientada a Eventos com Apache Kafka em Go

v1.0 — Go Event-Driven, Apache Kafka, Consumer Groups, At-Least-Once Delivery, Resiliência

Série Prática Golang — Projeto Especializado


🏛️ Visão Geral & Arquitetura Visual

O projeto Arquitetura Orientada a Eventos com Apache Kafka em Go implementa um ecossistema desacoplado de processamento assíncrono de eventos de negócios. A arquitetura emprega produtores de mensagens de alta vazão, tópicos particionados no Kafka e grupos de consumidores (Consumer Groups) cooperativos com rebalanceamento automático, garantindo semântica de entrega at-least-once, controle manual de commits de offset e tolerância a falhas.

Arquitetura do Projeto 🐹 Arquitetura Orientada a Eventos com Apache Kafka em Go

📁 Estrutura de Pastas Anti-Colisão

Os artefatos em Go, manifests e arquivos de configuração estão organizados na subpasta canônica app-go/:

catalogo_projetos/backend_golang_04_eventdriven_kafka/
├── assets/
│   └── arquitetura_golang_04.svg
├── app-go/
│   ├── main.go
│   ├── README.md
│   └── ...
└── index.md

🧑‍💼 Engenharia de Software & Especificação Formal

1. Histórias de Usuário (User Stories)

ID Persona Narrativa da Funcionalidade Critério de Aceitação Principal Prioridade
US-01 Arquiteto de Integração Quero desacoplar o checkout de compras do faturamento e emissão de notas fiscais Arquitetura orientada a eventos publicando no tópico de pedidos. Alta
US-02 Engenheiro de Dados Quero escalar o consumo horizontalmente adicionando instâncias ao mesmo Consumer Group Rebalanceamento automático de partições gerenciado pelo Kafka. Alta
US-03 Desenvolvedor Backend Quero controle manual de commit de offset para evitar perda de mensagens Commit acionado somente após processamento bem-sucedido no banco de dados. Alta
US-04 Engenheiro de Resiliência Quero isolar mensagens com falha persistente em uma Dead Letter Queue (DLQ) Desvio de eventos irrecuperáveis para fila secundária. Média
US-05 Operador de SRE Quero monitorar o lag do consumidor para evitar atrasos no processamento Métricas de lag por partição registradas no Prometheus. Média

2. Requisitos do Sistema

Requisitos Funcionais (RF)

Requisitos Não-Funcionais (RNF)


3. Diagrama de Casos de Uso

flowchart TD
    Producer[(fa:fa-paper-plane Produtor de Eventos)]
    Kafka[(fa:fa-database Cluster Apache Kafka)]
    Consumers[(fa:fa-boxes-stacked Consumer Group Go)]

    subgraph AppKafkaEDA ["🐹 Event-Driven Kafka (app-go)"]
        UC01["Publicar Evento em Tópico"]
        UC02["Particionar por Chave de Entidade"]
        UC03["Consumir Mensagens em Grupo"]
        UC04["Processar com Idempotência"]
        UC05["Comitar Offset Manualmente"]
    end

    Producer --> UC01
    UC01 --> Kafka
    Kafka --> UC02
    Kafka --> UC03
    UC03 --> Consumers
    Consumers --> UC04
    UC04 --> UC05
    UC05 --> Kafka

4. Matriz de Rastreabilidade (RTM)

ID Requisito História de Usuário Artefato de Código Teste de Aceitação
RF-01 US-01 app-go/main.go Publicação de eventos com partição por chave
RF-02 US-02 app-go/main.go Configuração de Consumer Group
RF-03 US-01 app-go/main.go Controle de idempotência com chave
RF-04 US-03 app-go/main.go Commit manual de offsets
RF-05 US-04, US-05 app-go/main.go Tratamento de erros e DLQ

🛠️ Implementação Guiada

📄 app-go/main.go (arquivo real do projeto)

package main

import "fmt"

type EventoPedidoCriado struct {
	PedidoID string  `json:"pedido_id"`
	Cliente  string  `json:"cliente"`
	Total    float64 `json:"total"`
}

func main() {
	fmt.Println("=== Event-Driven Architecture com Go & Apache Kafka ===")
	evento := EventoPedidoCriado{PedidoID: "PED-9901", Cliente: "Empresa XPTO", Total: 4500.00}
	fmt.Printf("Publicando evento no Kafka Topic [pedidos.v1]: %+v\n", evento)
	fmt.Println("Tracing OpenTelemetry: TraceID=4bf92f3577b34da6a3ce929d0e0e4736")
}

🚀 Como Executar no Laboratório

1. Navegue até a subpasta do projeto

cd catalogo_projetos/backend_golang_04_eventdriven_kafka/app-go

2. Execute via Go Toolchain

go run main.go

🏁 Matriz de Checkpoints de Conclusão

Checkpoint Meta Técnica Critério de Aceite Status
CP-01 Estrutura do Evento Mensagens serializadas em JSON com identificadores únicos PASS ✅
CP-02 Produtor de Mensagens Publicação assíncrona particionada por entidade PASS ✅
CP-03 Consumer Group Go Leitura cooperativa com distribuição de carga PASS ✅
CP-04 Commit Manual de Offset Garantia de semântica de entrega at-least-once PASS ✅
CP-05 Idempotência & Resiliência Processamento resiliente a mensagens duplicadas PASS ✅