📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados na Especialização em Backend com Go & Gin. Recomendado revisar antes de iniciar.
v1.0 — Go Event-Driven, Apache Kafka, Consumer Groups, At-Least-Once Delivery, Resiliência
Série Prática Golang — Projeto Especializado
- ➡️ Projeto: 🐹 Arquitetura Orientada a Eventos com Apache Kafka em Go
- Subpasta Canônica:
app-go/
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.
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
| 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 |
pedidos particionado por cliente_id.ConsumerGroup ouvindo partições designadas.pedidos.dlq.segmentio/kafka-go ou sarama).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
| 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 |
📄 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")
}
cd catalogo_projetos/backend_golang_04_eventdriven_kafka/app-go
go run main.go
| 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 ✅ |