Skip to content

sergiaodev/integrator

Repository files navigation

Async Integrator Kotlin Coroutines 🚀

Projeto demonstrativo de integração assíncrona utilizando Kotlin Coroutines e Spring Boot, focado em resolver problemas de latência em sistemas distribuídos.

Objetivo do projeto Integrator 🎯

Demonstrar como as corrotinas do Kotlin podem ser utilizadas para:

  • Reduzir a complexidade de operações assíncronas
  • Melhorar o throughput em sistemas de alta concorrência
  • Minimizar a latência em chamadas de rede
  • Integrar eficientemente diferentes tecnologias (Kafka, HTTP APIs, Monitoramento)

Integração com o CDC (Change Data Capture) Producer 🔗

Este projeto (Integrator) é a PARTE 2 do artigo técnico publicado no Medium:
Coroutines: Performance de aplicações em cenários críticos de latência

Contexto Completo da Solução

PARTE 1 - CDC Producer (Repositório GitHub):

  • Implementação de um pipeline de dados usando:
    • PostgreSQL + Debezium para Change Data Capture
    • Kafka para streaming de eventos em tempo real
    • Script Python para geração massiva de dados (10k+ eventos/sec)

PARTE 2 - Integrator (Este projeto)

Arquitetura Geral 🏗️

img_1.png

Diagrama estrutural PARTE 1 + PARTE 2:

graph LR
    P[(PostgreSQL)] --> D[Debezium]
    D --> K[(Kafka)]
    K --> I[Integrator]
    I --> C1[Client 1 API]
    I --> C2[Client 2 API]
    I --> C3[Client 3 API]
Loading

Demonstração em Vídeo 🎥

Assista à Demonstração

Projeto Integrator

Componentes Principais:

  1. Kafka Consumer (Spring Kafka)

    • Consumo assíncrono de mensagens de status
    • Processamento em lote não-bloqueante
  2. HTTP Client (OkHttp + Coroutines)

    • Chamadas de rede não-bloqueantes
    • Timeouts configuráveis
  3. Monitoring (Micrometer + Prometheus)

    • Métricas de desempenho em tempo real
    • Monitoramento de latência e throughput

Fluxo Principal:

sequenceDiagram
    participant Kafka as Kafka
    participant Consumer as Consumer
    participant Processor as Coroutine Processor
    participant HttpClient as OkHttp
    participant Metrics as Micrometer
    participant External as External API
    
    Kafka->>Consumer: Poll messages (async)
    Consumer->>Processor: launch coroutine per message
    Processor->>HttpClient: POST /status (non-blocking)
    HttpClient->>External: Async HTTP call
    External-->>HttpClient: Response
    HttpClient-->>Processor: Result
    Processor->>Metrics: Record latency
    Processor-->>Consumer: Acknowledge
    Metrics->>Prometheus: Export metrics
Loading

Tecnologias Utilizadas 💻

Tecnologia Versão Finalidade
Kotlin 1.9.25 Linguagem principal com corrotinas
Spring Boot 3.4.2 Framework base
Kafka (Spring) 3.4.x Mensageria assíncrona
OkHttp 4.12.0 Cliente HTTP não-bloqueante
Micrometer 1.12.x Monitoramento de métricas
JUnit 5 5.9.3 Testes unitários e integração

Como Funciona? ⚙️

Princípios Chave

1. Suspensão Seletiva

suspend fun sendStatus(endpoint: ClientEndpoint, json: String): NetworkResult<String> {
    return withContext(Dispatchers.IO) {
        // Operação de I/O não-bloqueante
    }
}

2. Paralelismo Controlado

val results = listOf(asyncTasks).awaitAll()

3. Resiliência

try {
    // Tentativa principal
} catch (e: IOException) {
    // Fallback estratégico
}

Métricas Chave 📊

Métrica Tipo Descrição
service.message.latency Timer Latência total desde consumo até confirmação
service.message.throughput Counter Volume de mensagens processadas por minuto
service.message.error Counter Falhas em chamadas HTTP para APIs externas
kafka.consumer.lag Gauge Atraso na leitura das mensagens do Kafka

Contribuição 🤝

  1. Faça um Fork do Repositório
    Clique aqui para criar seu fork

  2. Crie uma Branch para sua Feature

    git checkout -b feature/nova-funcionalidade
  3. Commits Semânticos Utilize o padrão de commits semânticos para manter o histórico organizado

git commit -m "feat: adiciona processamento em lote" 
git commit -m "fix: corrige timeout nas chamadas HTTP"
  1. Sincronize com Upstream
git pull upstream main
  1. Envie seu Pull Request Descreva claramente:
    • Problema resolvido
    • Mudanças implementadas
    • Impacto na performance

Licença 📜

License: MIT

Mantenedor Principal

Status do Projeto
Active 🔄

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors