Go语言中使用kafka

1.Windows环境下安装zookeeper和kafka

Windows环境下安装zookeeper和kafka

2.运行zookeeper

3.运行kaka

4.生产者

go 复制代码
import (
	"encoding/json"
	"github.com/Shopify/sarama"
	"strconv"
)

type Product struct {
	Id    int
	Name  string
	Title string
}

func NewProduct() error {
	config := sarama.NewConfig()
	config.Producer.RequiredAcks = sarama.WaitForAll
	config.Producer.Retry.Max = 10
	config.Producer.Return.Successes = true
	brokers := []string{"localhost:9092"}
	producer, err := sarama.NewAsyncProducer(brokers, config)
	if err != nil {
		return err
	}
	p := &Product{
		Id: 1,
		Name: "钻戒",
		Title: "那戒指的质地似乎是钻石制成的吧,闪闪发光又不失内敛,清雅又不失高贵,阳光洒下来,发出淡淡的光,和淡淡的清香,有着像是通了灵般的仙气",
	}

	key := sarama.StringEncoder(strconv.Itoa(p.Id))
	value, err := json.Marshal(p)
	if err != nil {
		return err
	}
	msg := &sarama.ProducerMessage{
		Topic: "new-products",
		Key:   key,
		Value: sarama.ByteEncoder(value),
	}
	producer.Input() <- msg
	return nil
}

5.消费者

go 复制代码
import (
	"encoding/json"
	"fmt"
	"github.com/Shopify/sarama"
	"log"
)

func Consume() error {
	// 初始化 Kafka 消费者
	config := sarama.NewConfig()
	config.Producer.RequiredAcks = sarama.WaitForAll
	config.Producer.Retry.Max = 10
	config.Producer.Return.Successes = true
	brokers := []string{"localhost:9092"}
	consumer, err := sarama.NewConsumer(brokers, config)
	partitionConsumer, err := consumer.ConsumePartition("newProduct", 0, sarama.OffsetNewest)
	if err != nil {
		log.Printf("Error consuming partition: %v", err)
		return err
	}
	for {
		select {
		case msg := <-partitionConsumer.Messages():
			var product Product
			err = json.Unmarshal(msg.Value, &product)
			if err != nil {
				log.Printf("Error unmarshaling product: %v", err)
				return err
			} else {
				fmt.Printf("New product: %+v\n", product)
			}
		case err = <-partitionConsumer.Errors():
			log.Printf("Error consuming message: %v", err)
			return err
		}
	}
}

6.main函数

go 复制代码
import (
	"fmt"
	"golang_test/kafka_test/kafka"
	"log"
	"sync"
)

var wg sync.WaitGroup

func main() {
	wg.Add(2)
	go func() {
		defer wg.Done()
		if err := kafka.NewProduct(); err != nil {
			log.Println("kafka生产者运行失败")
			return
		}
	}()
	go func() {
		defer wg.Done()
		if err := kafka.Consume(); err != nil {
			log.Println("kafka生产者运行失败")
			return
		}
	}()
	wg.Wait()
	fmt.Println("运行结束")
}
相关推荐
2401_8384725115 分钟前
C++中的访问者模式
开发语言·c++·算法
csbysj202026 分钟前
《Foundation 开关:深度解析其原理与应用》
开发语言
梦里小白龙1 小时前
java 通过Minio上传文件
java·开发语言
m0_561359671 小时前
基于C++的机器学习库开发
开发语言·c++·算法
星空露珠1 小时前
速算24点所有题库公式
开发语言·数据库·算法·游戏·lua
2401_832402751 小时前
C++中的类型擦除技术
开发语言·c++·算法
努力学习的小廉1 小时前
我爱学算法之—— 递归回溯综合(二)
开发语言·算法
sheji52611 小时前
JSP基于信息安全的读书网站79f9s--程序+源码+数据库+调试部署+开发环境
java·开发语言·数据库·算法
2301_763472461 小时前
C++网络编程(Boost.Asio)
开发语言·c++·算法
毕设源码-邱学长1 小时前
【开题答辩全过程】以 基于Java Web的电子商务网站的用户行为分析与个性化推荐系统为例,包含答辩的问题和答案
java·开发语言