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

目录
  • kafka go库
    • 注意
    • 例子

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生产消费消息的资料请关注我们其它相关文章!

(0)

相关推荐

  • golang连接kafka消费进ES操作

    1.首先初始化conf配置把kafka和ES的地址配置好还有一个日志方便查看 配置信息如下 用到的库是 github.com/astaxie/beego/config [logs] log_level = debug log_path = "./logs/log_transfer.log" [kafka] server_addr = 192.168.0.134:9092 topic = nginx_log [ES] addr = http://192.168.0.134:9200/ 2

  • Golang监听日志文件并发送到kafka中

    目录 前言 涉及的golang库和可视化工具: 工作的流程 环境准备 代码分层 关键的代码 main.go kafka.go tail.go 前言 日志收集项目的准备中,本文主要讲的是利用golang的tail库,监听日志文件的变动,将日志信息发送到kafka中. 涉及的golang库和可视化工具: go-ini,sarama,tail其中: go-ini:用于读取配置文件,统一管理配置项,有利于后其的维护 sarama:是一个go操作kafka的客户端.目前我用于向kefka发送消息 tail

  • golang如何使用sarama访问kafka

    下面一个客户端代码例子访问kafka服务器,来发送和接受消息. 使用方式 1.命令行参数 $ ./kafkaclient -h Usage of ./client: -ca string CA Certificate (default "ca.pem") -cert string Client Certificate (default "cert.pem") -command string consumer|producer (default "consu

  • Golang如何将日志以Json格式输出到Kafka

    目录 格式化接口 普通文本格式化器 Json文本格式化器 写日志接口 写日志到文件 写日志到Kafka 接口的组装 如何提高日志处理的吞吐量 在上一篇文章中我实现了一个支持Debug.Info.Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手.有兴趣的可以通过这个链接前往:https://github.com/bosima/ylog/releases/tag/v1.0.1 工程实践中,我们往往还需要对日志进行采集,将日志归集到一起,然后用于各种处理分析,比如生产环境

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

    目录 kafka go库 注意 例子 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版本改为g

  • RocketMQ生产消息与消费消息超详细讲解

    目录 1 RocketMQ简介 2 MQ的常见产品 3 环境搭建 4 单生产者单消费者模式 5 单生产者多消费者模式 5.1默认模式(负载均衡) 5.2广播模式 6 多生产者多消费者模式 1 RocketMQ简介 RocketMQ是阿里开源的一款非常优秀中间件产品,脱胎于阿里的另一款队列技术MetaQ,后捐赠给Apache基金会作为一款孵化技术,仅仅经历了一年多的时间就成为Apache基金会的顶级项目.并且它现在已经在阿里内部被广泛的应用,并且经受住了多次双十一的这种极致场景的压力(2017年的

  • Kafka简单客户端编程实例

    今天,我们给大家带来一篇如何利用Kafka的API进行客户端编程的文章,这篇文章很简单,就是利用Kafka的API创建一个生产者和消费者,生产者不断向Kafka写入消息,消费者则不断消费Kafka的消息.下面是具体的实例代码. 一.创建配置类Config 这个类很简单,只是存放了两个常量,一个是话题TOPIC,一个是线程数THREADS package com.lya.kafka; /** * 配置项 * @author liuyazhuang * */ public class Config

  • Java实现Kafka生产者消费者代码实例

    Kafka的结构与RabbitMQ类似,消息生产者向Kafka服务器发送消息,Kafka接收消息后,再投递给消费者. 生产者的消费会被发送到Topic中,Topic中保存着各类数据,每一条数据都使用键.值进行保存. 每一个Topic中都包含一个或多个物理分区(Partition),分区维护着消息的内容和索引,它们有可能被保存在不同服务器. 新建一个Maven项目,pom.xml 加入依赖: <dependency> <groupId>org.apache.kafka</gro

  • spring boot与kafka集成的简单实例

    本文介绍了spring boot与kafka集成的简单实例,分享给大家,具体如下: 引入相关依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.

  • 详解kafka中的消息分区分配算法

    目录 背景 RangeAssignor 定义 源码分析 场景 RoundRobinAssignor 定义 源码分析 场景 StickyAssignor 定义 场景 背景 kafka有分区机制,一个主题topic在创建的时候,会设置分区.如果只有一个分区,那所有的消费者都订阅的是这一个分区消息:如果有多个分区的话,那消费者之间又是如何分配的呢? 分配算法 RangeAssignor 定义 Kafka默认采⽤RangeAssignor的分配算法. RangeAssignor策略的原理是按照消费者总数

  • Go+Kafka实现延迟消息的实现示例

    目录 前言 原理 简单的实现 生产者 延迟服务 消费者 改进点 通用的延迟服务 生产者负责延迟服务 总结 前言 延迟队列是一个非常有用的工具,我们经常遇到需要使用延迟队列的场景,比如延迟通知,订单关闭等等. 这篇文章主要是使用Go+Kafka实现延迟消息. 使用了sarama客户端. 原理 Kafka实现延迟消息分为下面三步: 生产者把消息发送到延迟队列 延迟服务把延迟队列里超过延迟时间的消息写入真实队列 消费者消费真实队列里的消息 简单的实现 生产者 生产者只是把消息发送到延迟队列 msg :

  • C语言实现学生消费管理系统

    本文实例为大家分享了C语言实现学生消费管理系统的具体代码,供大家参考,具体内容如下 代码可以实现的功能: (1)直接从终端键盘输入信息(2)从磁盘文件录入学生信息(3)可以查询学生消费信息(4)可以删除学生信息(5)可以添加学生的消费信息,并显示添加后学生的人数(6)显示录入的学生信息(7) 把录入的学生信息保存到指定的文件中 代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #define L

  • 流式图表拒绝增删改查之kafka核心消费逻辑下篇

    目录 前篇回顾 kafka消费者线程 任务提交 前篇回顾 流式图表框架搭建 kafka核心消费逻辑线程池搭建 kafka消费者线程 突击检查八股文,实现线程的方法有哪些?嗯?没复习是吧,行没关系,那感谢参加本次面试哈. 常用的几种方式分别是: 继承Thread类,重写run方法 实现Runbale接口,重写run方法 实现Callable接口,重写call方法 这里我们直接创捷出一个任务类实现Runable方法,重写run方法,一个线程当作一个kafka client,所以要在任务类中声明一个K

  • C语言树状数组的实例详解

    C语言树状数组的实例详解 最近学了树状数组,给我的感觉就是 这个数据结构好神奇啊^_^ 首先她的常数比线段树小,其次她的实现复杂度也远低于线段树 (并没有黑线段树的意思=-=) 所以熟练掌握她是非常有必要的.. 关于树状数组的基础知识与原理网上一搜一大堆,我就不赘述了,就谈一些树状数组的应用好了 1,单点修改,求区间和 #define lowbit(x) (x&-x) // 设 x 的末尾零的个数为 y , 则 lowbit(x) == 2^y void Update(int i,int v)

随机推荐