go操作kafka

322 阅读1分钟

示例

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…