golang使用kafka

使用客户端:sarama

需要先安装gcc,windows系统可参考:https://blog.youkuaiyun.com/skh2015java/article/details/85075032

 

生产者
 

package main

import (
	"log"
	"os"
	"time"

	"github.com/Shopify/sarama"
)
var (
	logger = log.New(os.Stderr, "[sarama]", log.LstdFlags)
)

func main() {
	sarama.Logger = logger

	config := sarama.NewConfig()
	config.Producer.RequiredAcks = sarama.WaitForLocal
	config.Producer.Flush.Frequency = 500 * time.Millisecond
	config.Producer.Return.Successes = true


	producer, err := sarama.NewSyncProducer([]string{"localhost:9092"}, config)
	if err != nil {
		logger.Printf("Failed to produce message: %s", err)
		os.Exit(500)
	}
	defer producer.Close()

	for i := 0 ; i< 20 ; i++ {
		msg := &sarama.ProducerMessage{}
		msg.Topic = "hello"
		msg.Partition = int32(-1)
		msg.Key = sarama.StringEncoder("key")
		msg.Value = sarama.ByteEncoder("Hello Wo
### Golang 中常用的 Kafka 第三方库 #### confluent-kafka-go `confluent-kafka-go` 是 Confluent 提供的一个高性能的 Go 客户端,它底层依赖于 librdkafka C 库。该客户端支持多种特性,包括但不限于高吞吐量、低延迟以及丰富的配置选项。 ```go package main import ( "fmt" "github.com/confluentinc/confluent-kafka-go/kafka" ) func main() { config := &kafka.ConfigMap{ "bootstrap.servers": "localhost:9092", } producer, err := kafka.NewProducer(config) if err != nil { fmt.Printf("Failed to create producer: %v\n", err) return } defer producer.Close() for e := range producer.Events() { switch ev := e.(type) { case *kafka.Message: if ev.TopicPartition.Error != nil { fmt.Printf("Delivery failed: %v\n", ev.TopicPartition) } else { fmt.Printf("Delivered message to %v\n", ev.TopicPartition) } } } } ``` #### sarama `sarama` 是一个纯 Go 实现的 Apache Kafka 客户端,具有良好的社区支持和活跃度。尽管 `sarama-cluster` 已经不再维护[^3],但是基础版本仍然可以用于构建生产级别的应用。对于集群管理和高级功能的需求,则建议寻找其他替代方案或自行扩展。 ```go package main import ( "fmt" "github.com/Shopify/sarama" ) func main() { config := sarama.NewConfig() config.Consumer.Return.Errors = true consumer, err := sarama.NewConsumer([]string{"localhost:9092"}, config) if err != nil { panic(err) } defer consumer.Close() partitionList, _ := consumer.Partitions("test") // 获取主题分区列表 pc, _ := consumer.ConsumePartition("test", partitionList[0], sarama.OffsetNewest) select { case msg := <-pc.Messages(): fmt.Println(string(msg.Value)) } close(pc.Messages()) } ``` #### kafkago 考虑到跨服务器的时间不同步问题,在某些场景下可以选择使用更轻便且易于管理的库如 `kafka-go` 来处理 Kafka 数据流。这个库设计简单直观,并提供了足够的灵活性来满足大多数应用场景下的需求。 ```go package main import ( "context" "log" "time" "github.com/segmentio/kafka-go" ) func main() { r := kafka.NewReader(kafka.ReaderConfig{ Brokers: []string{"localhost:9092"}, Topic: "my_topic", GroupID: "group_id", MinBytes: 10e3, MaxBytes: 10e6, }) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() for { m, err := r.ReadMessage(ctx) if err != nil { break } log.Printf("message at topic/partition/offset %v/%v/%v:\n%s = %s\n", m.Topic, m.Partition, m.Offset, string(m.Key), string(m.Value)) } r.Close() } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值