Go语言kafka生产消费消息实例搬砖

 更新时间:2022年06月09日 09:59:31   作者:爱吃红薯粉  
这篇文章主要为大家介绍了Go语言kafka生产消费消息的实例搬砖,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

kafka go库

kafka go客户端官方目前没有提供,但在github有2个非常流行的库

星星较多,网上案例也多 https://github.com/Shopify/sarama

confluent官网提供的库 https://github.com/confluentinc/confluent-kafka-go

这里使用sarama,因为星星多,案例多,方便快速上手

注意

如果kafka版本在2.2以下,需要在go.mod里面将sarama版本改为github.com/Shopify/sarama v1.24.1

这是因为sarama只提供最新2个版本+2个月的兼容保证,所以使用低版本kafka是需要避坑

使用非集群集群生产者时,需要自行去创建topic,如果使用集群生产者,集群会自动创建

例子

package main
import (
   "fmt"
   "github.com/Shopify/sarama"
   cluster "github.com/bsm/sarama-cluster"
   "time"
)
var (
   Consumer *cluster.Consumer
   producer sarama.SyncProducer
   brokers = []string{"ip1:9092","ip2:9092","ip3:9092"}
   topic = "testGo"
   groupId = "testGo_test1"
)
func initProducer() {
   var err error
   config := sarama.NewConfig()
   config.Producer.RequiredAcks = sarama.WaitForLocal
   config.Producer.Retry.Max = 3
   config.Producer.Return.Successes = true
   brokers := brokers
   producer, err = sarama.NewSyncProducer(brokers,config)
   if err != nil {
      fmt.Printf("生产者初始化失败 -> %v \n", err)
      panic(err)
   }
   fmt.Println("生产者初始化成功。")
}
func initConsumer()  {
   var err error
   config := cluster.NewConfig()
   config.Consumer.Group.Rebalance.Strategy = sarama.BalanceStrategyRange
   config.Consumer.Offsets.Initial = sarama.OffsetNewest
   Consumer, err = cluster.NewConsumer(brokers,groupId,[]string{topic},config)
   if err != nil {
      fmt.Printf("消费者初始化失败 -> %v \n", err)
      panic(err.Error())
   }
   if Consumer == nil {
      panic(fmt.Sprintf("消费者为空. kafka info -> {brokers:%v, topic: %v, group: %v}", brokers, topic, groupId))
   }
   fmt.Printf("消费者初始化成功, consumer -> %v, topic -> %v, ", Consumer, topic)
}
func main() {
   initProducer()
   initConsumer()
   //生产消息
   for i := 1;i < 100; i ++ {
      pid, offset, err := producer.SendMessage(&sarama.ProducerMessage{
         Topic:     topic,
         Key:       sarama.StringEncoder(i),
         Value:     sarama.ByteEncoder("this is test message."),
      })
      if err != nil {
         fmt.Println("发送消息失败, err:", err)
         return
      }
      fmt.Printf("offset: %v\n", offset)
   }
   time.Sleep(2 * time.Second)
   //消费消息
   for {
       select {
       case msg, ok := <-Consumer.Messages():
           if ok {
              fmt.Printf("kafka msg: %s \n", msg.Value)
           }
      }
   }
}

运行结果如下

该demo流程如下

  • 引入单机sarama库和集群sarama库
  • 定义连接变量
  • 使用单sarama库实例化一个生产者
  • 使用集群sarama库实例化一个消费者
  • 循环100次发送100条消息
  • 使用sarama自带的生产消息构造器设置消息内容
  • 使用for让进程一直监听来自kafka的消息

以上就是Go语言kafka生产消费消息实例搬砖的详细内容,更多关于Go语言kafka生产消费消息的资料请关注脚本之家其它相关文章!

相关文章

  • golang中net的tcp服务使用

    golang中net的tcp服务使用

    这篇文章主要介绍了golang中net的tcp服务使用,文章通过服务端监听端口 展开主题的详细内容,具有一定的参考价值,需要的 小伙伴可以参考一下
    2022-04-04
  • Go语言的JSON处理详解

    Go语言的JSON处理详解

    json格式可以算我们日常最常用的序列化格式之一了,Go语言作为一个由Google开发,号称互联网的C语言的语言,自然也对JSON格式支持很好。
    2018-10-10
  • 一文详解Golang中的切片数据类型

    一文详解Golang中的切片数据类型

    这篇文章主要介绍了一文详解Golang中的切片数据类型,切片是一个种特殊的数组。是对数组的一个连续片段的引用,所以切片是一个引用类型
    2022-09-09
  • Golang 类型断言的具体使用

    Golang 类型断言的具体使用

    本文主要介绍了Golang 类型断言的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Go简单实现协程池的实现示例

    Go简单实现协程池的实现示例

    本文主要介绍了Go简单实现协程池的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Go语言学习之反射的用法详解

    Go语言学习之反射的用法详解

    反射指的是运行时动态的获取变量的相关信息。本文将为大家详细介绍Go语言中反射的用法,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-04-04
  • Go语言开发保证并发安全实例详解

    Go语言开发保证并发安全实例详解

    这篇文章主要为大家介绍了Go语言开发保证并发安全实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Golang 日期/时间包的使用详解

    Golang 日期/时间包的使用详解

    这篇文章主要介绍了Golang 日期/时间包的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • golang进行xml文件解析的操作方法

    golang进行xml文件解析的操作方法

    本文介绍了Go语言中解析XML文件的几种方法:小文件解析、大文件流式解析和复杂结构解析,对于小文件,使用标准库中的encoding/xml包;对于大文件,采用流式解析以避免内存溢出,对于复杂结构的XML文件,推荐使用第三方库github.com/beevik/etree
    2024-11-11
  • go按行读取文件的三种实现方式汇总

    go按行读取文件的三种实现方式汇总

    最近有遇到需要用go读取文件的情况,下面这篇文章主要给大家介绍了关于go按行读取文件的三种实现方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09

最新评论