一些Go操作Kafka的问题
1)包的选择
confluent-kafka-go使用了rdkafka的c库,破坏了go代码的收敛,不使用;
sarama不支持groud id 的功能,写consumer需要自己管理消费的partition,offset;很难用;
sarama-cluster是对sarama的一层封装,实现了group id 功能
2)关于offset问题
sarama-cluster有auto commit的功能,默认是一秒;但最好自己管理,如每100条数据MarkOffset,并CommitOffsets
3)实现consumer的Priority MQ功能
如1-5优先级的5个Topic,传入
map[string]int32 {
topic1: 1,
topic2: 2,
....
}
按Priority生成排序的consumerList,for循环遍历consume,<-consumer.Messages(),select之并设置default分支
4)producer
producer使用的AsyncProducer的对象池;测试:本机1K以上message大小,producer池可提升效率,原因是I/O时间长,单一Producer发送效率受限;小message(10byte),单个producer发送效率要高,瓶颈在producer池的频繁Get与Put
5)网络问题时,consumer会自动重连;
https://github.com/Shopify/sarama/issues/72
6)接收producer的Errors() chan一定要用for _, err := range producer.Errors();勿用for{}否则producer意外关闭,这里会死循环;
for {
err := <-producer.Errors() // 错误示例;若producer意外关掉,此外err一直返回nil,跑满CPU
if err != nil {
// print log
}
}
一些Go操作Kafka的问题的更多相关文章
- Java操作Kafka
java操作kafka非常的简单,然后kafka也提供了很多缺省值,一般情况下我们不需要修改太多的参数就能使用.下面我贴出代码. pom.xml <dependency> <grou ...
- SparkStreaming操作Kafka
Kafka为一个分布式的消息队列,spark流操作kafka有两种方式: 一种是利用接收器(receiver)和kafaka的高层API实现. 一种是不利用接收器,直接用kafka底层的API来实现( ...
- kfka学习笔记一:使用Python操作Kafka
1.准备工作 使用python操作kafka目前比较常用的库是kafka-python库,但是在安装这个库的时候需要依赖setuptools库和six库,下面就要分别来下载这几个库 https://p ...
- Java操作Kafka执行不成功
使用kafka-clients操作kafka始终不成功,原因不清楚,下面贴出相关代码及配置,请懂得指点一下,谢谢! 环境及依赖 <dependency> <groupId>or ...
- go语言操作kafka
go语言操作kafka Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据,具有高性能.持久化.多副本备份.横向扩展等特点.本文介绍了如何使用Go语言发送和 ...
- 使用python操作kafka
使用python操作kafka目前比较常用的库是kafka-python库 安装kafka-python pip3 install kafka-python 生产者 producer_test.py ...
- C++操作Kafka使用Protobuf进行跨语言数据交互
C++操作Kafka使用Protobuf进行跨语言数据交互 Kafka 是一种分布式的,基于发布 / 订阅的消息系统.主要设计目标如下: 以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对 T ...
- GO学习-(30) Go语言操作kafka
go操作kafka Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据,具有高性能.持久化.多副本备份.横向扩展等特点.本文介绍了如何使用Go语言发送和接收 ...
- kafka实战教程(python操作kafka),kafka配置文件详解
kafka实战教程(python操作kafka),kafka配置文件详解 应用往Kafka写数据的原因有很多:用户行为分析.日志存储.异步通信等.多样化的使用场景带来了多样化的需求:消息是否能丢失?是 ...
- python操作kafka
python操作kafka 一.什么是kafka kafka特性: (1) 通过磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能. (2) 高吞吐量 :即使是 ...
随机推荐
- Directory /home/hdfs/name is in an inconsistent state: storage directory does not exist or is not a
2018-06-11 17:50:36,896 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered except ...
- Mysql for Linux安装配置之——二进制安装
1.准备及安装1)查看OS版本 # cat /etc/redhat-release 2)创建mysql组及用户 # groupadd mysql # cat /etc/group|grep m ...
- WebSphere ssl证书公钥少于2048问题处理
WebSphere https默认使用的是安装时生成的IBM签名的证书,该证书密钥长度1024位在某些检查中会认为这不够安全.处理这个问题我们可以创建一个自签名的证书作为默认证书. 登录控制台,安全性 ...
- mvc4自定义辅助器方法的学习
1.什么是辅助器 它们可以对代码块和标记进行打包,以便能够在mvc框架应用程序中重用.可以理解成编写在页面上的C#代码(方法). 2 .自定义辅助器 创建“基本”的mvc示例,并创建Basic控制器, ...
- 从概率图模型pgm到rbm
有向图模型:directed acyclic graph DAG 贝叶斯网络 对称的,无向图, UGM: undirected graphic model UGM, 更有名的名称是MRF,mar ...
- 逆袭之旅DAY09.东软实训.接口
2018年7月5日 package day0705.teacher.test1usb; /** * 测试类 * @author Administrator * */ public class UsbI ...
- 逆袭之旅.DAY08东软实训.多态~
2018年7月4日
- python-列表,元组,range
# 列表# lst = ["光头强", 1, True, {}, (1, ), {123}, ["周杰伦",[], "周杰", " ...
- Saiku的基本使用介绍(三)
Saiku的基本使用介绍(这里都是使用Admin用户登录系统) 1.启动安装好的Saiku ( ./start-saiku.sh ) ,浏览器使用访问系统 http://localhost:8080 ...
- maven项目配置findbugs插件 使用git钩子控制代码的提交
maven项目配置findbugs插件对代码进行静态检测 当发现代码有bug时,就不让用户commit代码到远程仓库里 没有bug时才可以commit到远程仓库中 (1)新建maven项目 ,配置fi ...