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("运行结束")
}
相关推荐
初次攀爬者2 小时前
Kafka + KRaft模式架构基础介绍
后端·kafka
初次攀爬者3 小时前
Kafka + ZooKeeper架构基础介绍
后端·zookeeper·kafka
初次攀爬者3 小时前
Kafka 基础介绍
spring boot·kafka·消息队列
DemonAvenger4 天前
Kafka性能调优:从参数配置到硬件选择的全方位指南
性能优化·kafka·消息队列
花酒锄作田5 天前
Gin 框架中的规范响应格式设计与实现
golang·gin
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1235 天前
matlab画图工具
开发语言·matlab
dustcell.5 天前
haproxy七层代理
java·开发语言·前端
norlan_jame5 天前
C-PHY与D-PHY差异
c语言·开发语言
多恩Stone5 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc