示例
Kafka 基于 TCP 协议,并使用自己的应用层协议进行通信。
在 Go 语言中,操作 Kafka 的常用库是 github.com/segmentio/kafka-go。
以下是如何使用 kafka-go 的简单代码示例:
生产消息到 Kafka:
package main
import (
"context"
"log"
"github.com/segmentio/kafka-go"
)
func main() {
// 创建一个写入者,将消息生产到 "topic-A"
w := &kafka.Writer{
Addr: kafka.TCP("localhost:9092"),
Topic: "topic-A",
Balancer: &kafka.LeastBytes{},
}
err := w.WriteMessages(context.Background(),
kafka.Message{
Key: []byte("Key-A"),
Value: []byte("Hello World!"),
},
kafka.Message{
Key: []byte("Key-B"),
Value: []byte("One!"),
},
kafka.Message{
Key: []byte("Key-C"),
Value: []byte("Two!"),
},
)
if err != nil {
log.Fatalf("failed to write messages: %v", err)
}
if err := w.Close(); err != nil {
log.Fatalf("failed to close writer: %v", err)
}
}
从 Kafka 消费消息:
package main
import (
"context"
"fmt"
"log"
"github.com/segmentio/kafka-go"
)
func main() {
// 创建一个读取者,从 "topic-A" 消费消息
r := kafka.NewReader(kafka.ReaderConfig{
Brokers: []string{"localhost:9092"},
Topic: "topic-A",
MaxBytes: 10e6, // 10MB
})
for {
m, err := r.ReadMessage(context.Background())
if err != nil {
break
}
fmt.Printf("message at offset %d: %s = %s\n", m.Offset, string(m.Key), string(m.Value))
}
if err := r.Close(); err != nil {
log.Fatalf("failed to close reader: %v", err)
}
}
这些示例展示了如何使用 kafka-go 库进行基本的 Kafka 操作。您可以根据需要对其进行修改和扩展。
更多详细信息和示例,请参考 github.com/segmentio/k…。