1. kafka消费者的Consume()方法会阻塞;
  2. 当Consume()方法返回err时,不确定继续消费有没有问题;保险起见,退出进程,然后重新初始化。
  3. 当Consume()方法返回nil是,是可以继续消费的,亲测有效。

需要注意的点写在了注释里:

//StartKafkaConsumer 启动kafka消费者
func StartKafkaConsumer(ctx context.Context) {
//defer utils.ForPanic() //当消费者出现问题的时候,通过panic退出进程。然后重新启动初始化
//因此代码里不要加panic处理的机制
config := sarama.NewConfig()
config.Version = sarama.V2_1_0_0 // specify appropriate version
config.Consumer.Return.Errors = true
cfg := ReaderConfig.Config()
group, err := sarama.NewConsumerGroup(
[]string{cfg.GetString("kafka.addr")},
cfg.GetString("kafka.group_id"), config)
if err != nil {
my_logger.Errorf("sarama.NewConsumerGroup error, err=%s", err.Error())
panic(err)
//return
}
defer func() { _ = group.Close() }() // Track errors
go func() {
defer utils.ForPanic()
for err := range group.Errors() {
if err != nil {
my_logger.Errorf("consumer error:%s", err.Error())
}
}
}()
topics := []string{cfg.GetString("kafka.topics")}
queueSize := cfg.GetInt64("kafka.queue_size")
if queueSize <= 0 {
my_logger.Errorf("queueSize <= 0")
panic("queue_size error")
}
log.Printf("queue size:%d\n", queueSize)
handler := ConsumerGroupHandler{
Pipe: make(chan []byte, queueSize),
}
coroutineCount := cfg.GetInt64("kafka.co_count")
if coroutineCount <= 0 {
my_logger.Errorf("coroutineCount <= 0")
panic("coroutineCount error")
}
for i := 0; i < int(coroutineCount); i++ {
go handler.Do()
}
log.Println("start success!")
for {
//关键代码
//正常情况下:Consume()方法会一直阻塞
//我测试发现,约30分钟左右,Consume()会返回,但没有error
//无error的情况下,可以重复调用Consume()方法
//当有error产生的时候,不确定Consume()是否能够继续完善的执行。
//因此保险的办法是抛出panic,让进程重启。
err = group.Consume(context.Background(), topics, &handler)
if err != nil {
my_logger.Errorf("group.Consume error: err=%s", err.Error())
panic(err)
} else {
my_logger.Info("group.Consume exit")
}
}
}

golang中使用kafka客户端sarama消费时需要注意的一个点的更多相关文章

  1. 【解决了一个小问题】golang samara的kafka客户端中使用错误版本号导致初始化失败

    发现在如下代码中存储kafka生产者初始化失败: config.Version = sarama.V0_10_2_1 //V2_2_0_0 producer, err := sarama.NewSyn ...

  2. Golang中使用kafka

    golang中比较好用的kafka client有 sarama confluent-kafka-go go_kafka_client optiopay-kafka siesta 其中 sarama的 ...

  3. Effective C++ 条款11,12 在operator= 中处理“自我赋值” || 复制对象时不要忘记每一个成分

    1.潜在的自我赋值     a[i] = a[j];     *px = *py; 当两个对象来自同一个继承体系时,他们甚至不需要声明为相同类型就可能造成别名. 现在担心的问题是:假如指向同一个对象, ...

  4. 从0开始搭建kafka客户端

    上一节,我们实现了搭建kafka集群.本节我们将从0开始,使用Java,搭建kafka客户端生产消费模型. 1.创建maven项目2.kafka producer3.kafka consumer4.结 ...

  5. 说说不知道的Golang中参数传递

    本文由云+社区发表 导言 几乎每一个C++开发人员,都被面试过有关于函数参数是值传递还是引用传递的问题,其实不止于C++,任何一个语言中,我们都需要关心函数在参数传递时的行为.在golang中存在着m ...

  6. Golang中如何正确的使用sarama包操作Kafka?

    Golang中如何正确的使用sarama包操作Kafka? 一.背景 在一些业务系统中,模块之间通过引入Kafka解藕,拿IM举例(图来源): 用户A给B发送消息,msg_gateway收到消息后,投 ...

  7. 关于Java客户端连接虚拟机中的Kafka时,无法发送、接收消息的问题

    kafka通过控制台模拟消息发送和消息接收正常,但是通过javaAPI操作生产者发送消息不成功 消费者接收不到数据解决方案? 1.问题排查 (1)首先通过在服务器上使用命令行来模拟生产.消费数据,发现 ...

  8. 【Azure Developer】在Azure VM (Windows) 中搭建 kafka服务,并且通过本地以及远程验证 发送+消费 消息

    问题描述 查看了 "How to Install and Run Apache Kafka on Windows? " 一文后,成功安装了Kafka服务,但是如何使用呢?如何在其他 ...

  9. kafka客户端代码解析

    转载:http://backend.blog.163.com/blog/static/202294126201431724652597/ 可以使用服务器端下载的kafka二进制包及依赖,也可以通过ma ...

随机推荐

  1. 简单备忘一下Linux下的wget和curl如何使用http proxy

    简单备忘一下Linux下的wget和curl如何使用http proxywget -e "http_proxy=porxyhost:port" www.baidu.comcurl ...

  2. JAVA开发 环境基础 IDEA 常用快捷键

    java 源代码运行必须先用javac编译生成字节码文件 XXX.class运行 java XXX 进行运行 环境变量classpath:已编译的字节码文件搜索路径--临时配置: set classp ...

  3. 痞子衡嵌入式:把玩i.MXRT1062 TencentOS Tiny EVB_AIoT开发板(1) - 开发环境搭建与点灯

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1062 TencentOS Tiny EVB_AIoT开发板环境搭建与点灯. 腾讯 TencentOS 团队于2021年1 ...

  4. c/c++实现CRC查表及算法

    说明 CRC被广泛应用到各个领域.足见其厉害之处 本文介绍的是CRC查表法. 拷贝代码即可使用 CRC 的起始值 本来默认是0, 实际生产中遇到过,CRC初始值为0xFFFF, 故将其初始值以参数的形 ...

  5. 【LeetCode】207. Course Schedule 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/course-s ...

  6. 【LeetCode】450. Delete Node in a BST 解题报告 (Python&C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 迭代 日期 题目地址:https://leetcode ...

  7. (数据科学学习手札133)利用geopandas绘制拓扑着色地图

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在绘制某些地图时,为了凸显出每个独立的 ...

  8. ZOJ 3870:Team Formation(位运算&思维)

    Team Formation Time Limit: 2 Seconds Memory Limit: 131072 KB For an upcoming programming contest, Ed ...

  9. Java Web程序设计笔记 • 【目录】

    章节 内容 实践练习 Java Web程序设计作业目录(作业笔记) 第1章 Java Web程序设计笔记 • [第1章 Web应用程序] 第2章 Java Web程序设计笔记 • [第2章 JSP基础 ...

  10. Java程序设计基础笔记 • 【第9章 方法与参数类型】

    全部章节   >>>> 本章目录 9.1 有参数有返回值的方法 9.1.1 有参数有返回值的方法的定义和调用 9.1.2 返回值的传递过程 9.1.3 方法返回值的注意事项 9 ...