kafka重复数据问题排查记录
问题
向kafka写数据,然后读kafka数据,生产的数据量和消费的数据量对不上。
开始怀疑人生,以前奠定的基础受到挑战。。。
原来的测试为什么没有覆盖生产量和消费量的对比?
消费者写的有问题?反复检,无果。。。
再反过来梳理生产者的代码,检查了几遍,也并无发现疏漏。
开始怀疑Kafka
以前看过文章,说kafka数据有可能重复和丢失数据,难道kafka的这么不精确,丢了这么多数据?
原因
最后排查到生产者,kafka生产者使用confluent-kafka-go。
向kafka生产数据的伪代码如下:
type Message struct {
Content []byte
}
message = &Message{}
for {
content = getFromQ()
message.Content =content
Send(message)
}
这段代码是有问题的。
Send()操作不是直接发送出去,而是放入一个队列,这样,如果队列数据发送前,下一次循环再次调用
message.Content =content
会将原来的content覆盖掉,就会出现写入kafka的数据存在重复。并且如果前一次数据长度大于下一次数据长度,后者覆盖前者,消费量就会小于生产量。
解决办法
需要将代码修改为:
type Message struct {
Content []byte
}
for {
content = getFromQ()
message = &Message{}
message.Content =content
Send(message)
}
每次发送消息时,重新定义一个变量保存数据,这样就不会出现覆盖问题。
关于confluent-kafka-go如何生产数据可参考
https://blog.csdn.net/lanyang123456/article/details/78377152
参考
kafka丢数据和数据重复
https://blog.csdn.net/xinlangtianxia/article/details/51387689
kafka重复消费解决方案
https://blog.csdn.net/qq_16583617/article/details/79648221
kafka重复数据问题排查记录的更多相关文章
- oracle学习----去除表中的重复数据
重复的数据可能有这样两种情况,第一种:表中只有某些字段一样,第二种:两行记录完全一样.第一.对于部分字段重复数据的删除 先来谈谈如何查询重复的数据吧. 下面语句可以查询出那 ...
- MongoDB实现数组中重复数据删除
这个功能真的是写死我了,对于MongoDB一点都不熟悉,本来想使用spring与MongoDB的融合mongoDBTemplate,发现压根不是web项目,懒得配置那些配置文件,就使用最原始的数据库操 ...
- Kafka重复消费和丢失数据研究
Kafka重复消费原因 底层根本原因:已经消费了数据,但是offset没提交. 原因1:强行kill线程,导致消费后的数据,offset没有提交. 原因2:设置offset为自动提交,关闭kafka时 ...
- Oracle、SQLServer 删除表中的重复数据,只保留一条记录
原文地址: https://blog.csdn.net/yangwenxue_admin/article/details/51742426 https://www.cnblogs.com/spring ...
- mysql 删除重复数据只保留一条记录
删除重复数据保留name中id最小的记录 delete from order_info where id not in (select id from (select min(id) as id fr ...
- MSSQL sql server 2005/2008 row_number()函数应用之–删除表中重复记录,只保留一条不重复数据
转自:http://www.maomao365.com/?p=4942 下文主要讲述:重复数据只获取一条的方法 row_number函数在数据库中的功能是为每一行 按照一定的规则生成一个编号,我们常常 ...
- kafka 如何不消费重复数据?比如扣款,我们不能重复的扣?
其实还是得结合业务来思考,我这里给几个思路: 比如你拿个数据要写库,你先根据主键查一下,如果这数据都有了,你就别插入 了,update 一下好吧. 比如你是写 Redis,那没问题了,反正每次都是 s ...
- Kafka消费者-从Kafka读取数据
(1)Customer和Customer Group (1)两种常用的消息模型 队列模型(queuing)和发布-订阅模型(publish-subscribe). 队列的处理方式是一组消费者从服务器读 ...
- Kafka权威指南 读书笔记之(四)Kafka 消费者一一从 Kafka读取数据
KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力 ...
随机推荐
- 若sql语句中order by指定了多个字段,怎么排序?
举个例子吧: order by id desc,time desc 先是按 id 降序排列 (优先)如果 id 字段 有些是一样的话 再按time 降序排列 (前提是满足id降序排列)
- 微软Power BI报表服务器学习总览
今天,微软宣布了8月更新Power BI Report Server!此版本包含一些新功能,包括一些备受期待的项目,如报表主题,条件格式改进和报表页面工具提示. 报告 报告主题 用于触发操作的按钮 组 ...
- git 提交去除每次输账号密码
问题:在使用git代码仓库时,使用git clone 获取代码时,如果使用的是https协议,则在每次push时需要输入账号密码. 相关文档:文档一,文档二 验证了文档一种的方法二可用,记录一下 创建 ...
- pdb的数量限制
Decide How to Configure the CDB --搜索文档 Prepare to create the CDB by research and careful planning. T ...
- 1111B - Average Superhero Gang Power
刷数学题不知道为啥出来这个 算是贪心吧,先把所有的power加起来,然后sort一遍,每次删掉最小的那个数,记录一个max,平均值ave如果比max大,就替换,一定要小心m的值可能会比n小,意味着不一 ...
- xdoj-1010(区间问题)
题目链接 1 扫描一遍不行扫描两遍呗 2 O(n)时间确定cd[i] [max( a[k]-_min) _min是k+1~n的最小值.i<=k<=n] #include <cstd ...
- 20155208徐子涵 2016-2017-2 《Java程序设计》第7周学习总结
20155208徐子涵 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十三章 时间与日期 13.1 认识时间与日期 就目前来说,即使标注为GMT(无论是文 ...
- set_union和set_intersection
set_union使用方法: set_union(集合A起始地址,集合A终止地址,集合B起始地址,集合B终止地址,插入C集合中(操作:inserter(C.C.begin()))); set_inte ...
- Linux交叉工具链安装
这篇博文http://blog.csdn.net/u010957054/article/details/58056863 提到了一个好的百度网盘,里面有各个版本的交叉工具链. http://www.3 ...
- POJ3904 Sky Code
题意 Language:Default Sky Code Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3980 Accepte ...