Trabalhando com Kafka em Go (Golang) com a biblioteca segmentio/kafka-go
\n\nApache Kafka é uma plataforma distribuída para streaming de dados, que se tornou o padrão de facto para a construção de sistemas de troca de mensagens de alta carga. Ao desenvolver em Go (Golang), uma das bibliotecas mais populares e confiáveis para interagir com Kafka é a segmentio/kafka-go. Neste artigo, abordaremos em detalhes como instalar, configurar e usar esta biblioteca para criar produtores e consumidores.
\n\nPor que segmentio/kafka-go?
\n\nExistem várias bibliotecas Go para Kafka no mercado (por exemplo, Sarama e Confluent Go Client). A segmentio/kafka-go se destaca pelas seguintes vantagens:
- \n
- Go puro — não requer dependências C (ao contrário do Confluent), simplificando a compilação e implantação. \n
- Suporte ao Kafka Protocol v2 — compressão eficiente, batching e suporte a transações. \n
- API simples — interfaces intuitivas para produtores, consumidores e administração de tópicos. \n
- Comunidade ativa — atualizações regulares e boa documentação. \n
Instalação da biblioteca
\n\nPara começar, adicione a biblioteca ao seu projeto usando go get:
go get github.com/segmentio/kafka-go\n\nCertifique-se de ter uma instância do Kafka em execução (localmente ou via Docker). Exemplo de configuração mínima com Docker Compose:
\n\nversion: '3'\nservices:\n zookeeper:\n image: confluentinc/cp-zookeeper:latest\n environment:\n ZOOKEEPER_CLIENT_PORT: 2181\n kafka:\n image: confluentinc/cp-kafka:latest\n depends_on:\n - zookeeper\n ports:\n - "9092:9092"\n environment:\n KAFKA_BROKER_ID: 1\n KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181\n KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092\n\nCriando um produtor (Producer)
\n\nO produtor envia mensagens para um tópico Kafka. Veja um exemplo básico:
\n\npackage main\n\nimport (\n "context"\n "fmt"\n "log"\n "time"\n\n "github.com/segmentio/kafka-go"\n)\n\nfunc main() {\n // Configuração do produtor\n writer := &kafka.Writer{\n Addr: kafka.TCP("localhost:9092"),\n Topic: "test-topic",\n Balancer: &kafka.LeastBytes{}, // Balanceamento por tamanho da mensagem\n BatchSize: 10, // Enviar lote de 10 mensagens\n BatchTimeout: 100 * time.Millisecond,\n }\n defer writer.Close()\n\n // Envio de mensagem\n err := writer.WriteMessages(context.Background(),\n kafka.Message{\n Key: []byte("key-1"),\n Value: []byte("Olá, Kafka do Go!"),\n },\n )\n if err != nil {\n log.Fatal("Erro ao enviar mensagem:", err)\n }\n\n fmt.Println("Mensagem enviada com sucesso")\n}\n\nParâmetros chave do kafka.Writer:
- \n
Addr— endereço do broker Kafka. \n Topic— nome do tópico. \n Balancer— estratégia de distribuição de mensagens entre partições (LeastBytes, RoundRobin, Hash). \n BatchSizeeBatchTimeout— otimização de desempenho. \n
Criando um consumidor (Consumer)
\n\nO consumidor lê mensagens de um tópico. Exemplo simples com gerenciamento manual de offset:
\n\npackage main\n\nimport (\n "context"\n "fmt"\n "log"\n\n "github.com/segmentio/kafka-go"\n)\n\nfunc main() {\n // Configuração do reader (consumidor)\n reader := kafka.NewReader(kafka.ReaderConfig{\n Brokers: []string{"localhost:9092"},\n Topic: "test-topic",\n GroupID: "my-consumer-group",\n MinBytes: 10, // Tamanho mínimo do lote\n MaxBytes: 10e6, // 10 MB\n StartOffset: kafka.FirstOffset, // Come Também na biblioteca
Bibliotecas WebSocket Kotlin para criar tempo real em aplicações web
Autorização e Autenticação em PHP: Guia Completo com Exemplos
Monitoramento de aplicações C# (.NET) com AppMetrics
Envio de email em Java: guia completo sobre JavaMail e Jakarta Mail