Golang - Kafka操作

寫入

package main

import (
	"fmt"
	"github.com/Shopify/sarama"
	"os"
	"time"
)

func main() {
	config := sarama.NewConfig()
	config.Producer.Return.Successes = true
	config.Producer.Timeout = 5 * time.Second

	p, err := sarama.NewSyncProducer([]string{"xxx.xxx.xxx.xxx:9092"}, config)
	if err != nil {
		fmt.Fprintf(os.Stdout, "sarama.NewSyncProducer err, message=%v \n", err)
		return
	}
	defer p.Close()

	for i := 0; i < 10; i++ {
		msg := &sarama.ProducerMessage{
			Topic: "test",
			Value: sarama.ByteEncoder(fmt.Sprintf("sync: this is a message. index=%d", i)),
		}

		if part, offset, err := p.SendMessage(msg); err != nil {
			fmt.Fprintf(os.Stdout, "發送失敗,Error: %v \n", err)
		} else {
			fmt.Fprintf(os.Stdout, "發送成功,partition=%d, offset=%d \n", part, offset)
		}
	}
}

讀取

package main

import (
	"fmt"
	"github.com/Shopify/sarama"
	"os"
)

func main() {
	config := sarama.NewConfig()
	config.Consumer.Return.Errors = true
	config.Version = sarama.V0_11_0_2

	c, err := sarama.NewConsumer([]string{"xxx.xxx.xxx.xxx:9092"}, config)
	if err != nil {
		fmt.Fprintf(os.Stdout, "sarama.NewConsumer err, message=%v \n", err)
		return
	}
	defer c.Close()

	cp, err := c.ConsumePartition("test", 0, sarama.OffsetOldest)
	if err != nil {
		fmt.Fprintf(os.Stdout, "try create partition_consumer err, message=%v \n", err)
		return
	}
	defer cp.Close()

	for {
		select {
		case msg := <-cp.Messages():
			fmt.Fprintf(os.Stdout, "msg offset: %d, partition: %d, timestamp: %s, value: %s \n", msg.Offset, msg.Partition, msg.Timestamp.String(), string(msg.Value))
		case err := <-cp.Errors():
			fmt.Fprintf(os.Stdout, "err :%v \n", err)
		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章