要在Go语言中与Kafka进行本地连接,你需要使用一个Kafka客户端库,比如 confluent-kafka-go
或者 sarama
。以下是使用这两个客户端库的简单例子:
使用 confluent-kafka-go
首先,确保已经通过 go get
命令安装了 confluent-kafka-go
库:
go get -u github.com/confluentinc/confluent-kafka-go/kafka
下面是一个生产者(producer)示例,它会将消息发送到本地运行的Kafka集群:
package main
import (
"fmt"
"github.com/confluentinc/confluent-kafka-go/kafka"
)
func main() {
p, err := kafka.NewProducer(&kafka.ConfigMap{
"bootstrap.servers": "localhost:9092",
})
if err != nil {
panic(err)
}
defer p.Close()
topic := "test_topic"
for _, word := range []string{"Hello", "World"} {
p.Produce(&kafka.Message{
TopicPartition: kafka.TopicPartition{Topic: &topic, Partition: kafka.PartitionAny},
Value: []byte(word),
}, nil)
}
// 等待消息发送完毕
p.Flush(15 * 1000)
}
使用 sarama
首先,确保已经通过 go get
命令安装了 sarama
库:
go get -u github.com/Shopify/sarama
下面是一个生产者(producer)示例,它会将消息发送到本地运行的Kafka集群:
package main
import (
"log"
"github.com/Shopify/sarama"
)
func main() {
config := sarama.NewConfig()
config.Producer.Return.Successes = true
producer, err := sarama.NewSyncProducer([]string{"localhost:9092"}, config)
if err != nil {
log.Fatal("Error creating producer:", err)
}
defer producer.Close()
msg := &sarama.ProducerMessage{
Topic: "test_topic",
Value: sarama.StringEncoder("Hello World"),
}
partition, offset, err := producer.SendMessage(msg)
if err != nil {
log.Fatal("Error sending message:", err)
}
log.Printf("Message is stored in topic(%s)/partition(%d)/offset(%d)\n", msg.Topic, partition, offset)
}
请确保在运行这些代码之前,你的本地Kafka服务已经启动并且可以接受连接。通常情况下,Kafka默认监听在 localhost:9092
地址。
如果你正在使用 docker-compose
, 你可能需要确认 Kafka 容器的名字或者对外映射的端口,并将这些信息替换到 bootstrap.servers
配置项中。
以上示例展示的是生产者的创建和使用,如果你需要创建消费者(consumer),相应的客户端库都提供了消费者API来订阅主题、读取消息等功能。