Skip to main content

Interagindo com o cluster Kafka com Go

kafka-go.go
package main

import (
"fmt"
"github.com/confluentinc/confluent-kafka-go/kafka"
)

func main() {
// Configurações do produtor
producer, err := kafka.NewProducer(&kafka.ConfigMap{
"bootstrap.servers": "localhost:29092,localhost:39092",
"client.id": "go-producer",
})
if err != nil {
panic(err)
}
defer producer.Close()

// Enviar mensagem
topic := "test_topic"
message := "Hello, Kafka from Go!"
producer.Produce(&kafka.Message{
TopicPartition: kafka.TopicPartition{Topic: &topic, Partition: kafka.PartitionAny},
Value: []byte(message),
}, nil)

// Aguardar a entrega de todas as mensagens
producer.Flush(15 * 1000)

// Configurações do consumidor
consumer, err := kafka.NewConsumer(&kafka.ConfigMap{
"bootstrap.servers": "localhost:29092,localhost:39092",
"group.id": "go-consumer-group",
"auto.offset.reset": "earliest",
})
if err != nil {
panic(err)
}
defer consumer.Close()

// Assinar tópico
consumer.SubscribeTopics([]string{topic}, nil)

// Consumir mensagens
for {
msg, err := consumer.ReadMessage(-1)
if err == nil {
fmt.Printf("Received message: %s\n", string(msg.Value))
} else {
fmt.Printf("Consumer error: %v (%v)\n", err, msg)
break
}
}
}