golang结合Kafka消息队列实践(一)

本文介绍了如何在Golang中使用sarama库与Kafka进行交互,包括设置生产者和消费者。文章详细讲解了sarama配置、异步生产者的工作方式、消息确认机制以及消费者的基本使用,提供了示例代码帮助理解。
摘要由CSDN通过智能技术生成

公司决定使用kafka来作为新一代的消息队列来使用,于是开始对kafka的机制,原理,go客户端的使用,各种了解了一番,过程中也遇到了不少的坑,特地写出来,和大家分享,也供自己参考,加深印象。

首先,kafka的设计思想,各个角色比如broker,producer,consumer,partition等等还有与它们相关的配置,这里就先不作介绍了,官方文档都有,文章后面也会提到。

附上kafka官方文档链接: 
http://kafka.apachecn.org/documentation.html

客户端选择: 
go连接kafka的客户端不多,综合对比了下,决定使用sarama 
“go get github.com/Shopify/sarama”

生产者:

 

func SaramaProducer()  {

 

    config := sarama.NewConfig()

    //等待服务器所有副本都保存成功后的响应

    config.Producer.RequiredAcks = sarama.WaitForAll

    //随机向partition发送消息

    config.Producer.Partitioner = sarama.NewRandomPartitioner

    //是否等待成功和失败后的响应,只有上面的RequireAcks设置不是NoReponse这里才有用.

    config.Producer.Return.Successes = true

    config.Producer.Return.Errors = true

    //设置使用的kafka版本,如果低于V0_10_0_0版本,消息中的timestrap没有作用.需要消费和生产同时配置

    //注意,版本设置不对的话,kafka会返回很奇怪的错误,并且无法成功发送消息

    config.Version = sarama.V0_10_0_1

 

    fmt.Println("start make producer")

    //使用配置,新建一个异步生产者

    producer, e := sarama.NewAsyncProducer([]string{"182.61.9.153:6667","182.61.9.154:6667","182.61.9.155:6667"}, config)

    if e != nil {

        fmt.Println(e)

        return

    }

    defer producer.AsyncClose()

 

    //循环判断哪个通道发送过来数据.

    fmt.Println("start goroutine")

    go func(p sarama.AsyncProducer) {

        for{

            select {

            case  <-p.Successes():

                //fmt.Println("offset: ", suc.Offset, "timestamp: 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值