kafka重复数据问题排查记录

7 篇文章 0 订阅
7 篇文章 0 订阅

问题

向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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值