美文网首页面试
kafka数据丢失与重复

kafka数据丢失与重复

作者: 阔阔飞翔 | 来源:发表于2018-12-21 17:26 被阅读0次

1、Kafka重复消费原因

底层根本原因:已经消费了数据,但是offset没提交。

原因1:强行kill线程,导致消费后的数据,offset没有提交。

原因2:设置offset为自动提交,关闭kafka时,如果在close之前,调用 consumer.unsubscribe() 则有可能部分offset没提交,下次重启会重复消费。

原因3(重复消费最常见的原因):消费后的数据,当offset还没有提交时,partition就断开连接。比如,通常会遇到消费的数据,处理很耗时,导致超过了Kafka的session timeout时间(0.10.x版本默认是30秒),那么就会re-blance重平衡,此时有一定几率offset没提交,会导致重平衡后重复消费。

原因4:当消费者重新分配partition的时候,可能出现从头开始消费的情况,导致重发问题。

原因5:当消费者消费的速度很慢的时候,可能在一个session周期内还未完成,导致心跳机制检测报告出问题。

2、Kafka Consumer丢失数据原因

猜测:设置offset为自动定时提交,当offset被自动定时提交时,数据还在内存中未处理,此时刚好把线程kill掉,那么offset已经提交,但是数据未处理,导致这部分内存中的数据丢失。

消息推动服务,每天早上,手机上各终端都会给用户推送消息,这时候流量剧增,可能会出现kafka发送数据过快,导致服务器网卡爆满,或者磁盘处于繁忙状态,可能会出现丢包现象。

总结起来就是来得快,去得慢,然后offset又提交了。

解决方案:首先对kafka进行限速,其次启用重试机制,重试间隔时间设置长一些,最后Kafka设置acks=all。

检测方法:使用重试机制,查看问题所在。

kafka配置如下:

props.put("compression.type", "gzip");

props.put("linger.ms", "50");

props.put("acks", "all");

props.put("retries ", 30);

props.put("reconnect.backoff.ms ", 20000);

props.put("retry.backoff.ms", 20000);

3、解决方案

维护offset

记录offset和恢复offset的方案。理论上记录offset,下一个group consumer可以接着记录的offset位置继续消费。

简单offset记录方案:

每次消费时更新每个topic+partition位置的offset在内存中,

Map<key, value>,key=topic+'-'+partition,value=offset

当调用关闭consumer线程时,把上面Map的offset数据记录到 文件中*(分布式集群可能要记录到redis中)。

下一次启动consumer,需要读取上一次的offset信息,方法是 以当前的topic+partition为key,从上次的Map中去寻找offset。

然后使用consumer.seek()方法指定到上次的offset位置。

说明:

1、该方案针对单台服务器比较简单,直接把offset记录到本地文件中即可,但是对于多台服务器集群,offset也要记录到同一个地方,并且需要做去重处理。

如果线上程序是由多台服务器组成的集群,是否可以用一台服务器来支撑?应该可以,只是消费慢一点,没多大影响。

2、如何保证接着offset消费的数据正确性

为了确保consumer消费的数据一定是接着上一次consumer消费的数据,consumer消费时,记录第一次取出的数据,将其offset和上次consumer最后消费的offset进行对比,如果相同则继续消费。如果不同,则停止消费,检查原因。

相关文章

  • kafka数据丢失与重复

    1、Kafka重复消费原因 底层根本原因:已经消费了数据,但是offset没提交。 原因1:强行kill线程,导致...

  • Kafka实际案例问题

    kafka consumer防止数据丢失 Kafka学习之怎么保证不丢,不重复消费数据 1 消费者pull数据时,...

  • Kafka中消息丢失和重复消费,以及Leader选举机制

    一、Kafka中的消息是否会丢失和重复消费 要确定Kafka的消息是否丢失或重复,从两个方面分析入手:消息发送和消...

  • KafKa数据丢失

    常见的数据丢失 如果auto.commit.enable=true,当consumer fetch了一些数据但还没...

  • 数据仓库模型设计心得

    数据不丢失数据丢失,导致重新跑数据,统计不准确,建议要长期保留历史数据 数据不重复上游数据重复,会导致下游数据治理...

  • 面试官:请谈谈写入消息中间件的数据,如何保证不丢失?

    目录 1、背景引入 2、Kafka分布式存储架构 3、Kafka高可用架构 4、画图复现Kafka的写入数据丢失问...

  • Kafka丢失数据问题优化总结

    1、Kafka丢失数据问题优化总结 数据丢失是一件非常严重的事情事,针对数据丢失的问题我们需要有明确的思路来确定问...

  • [SPARK-19680] OffsetOutOfRangeEx

    当kafka中的数据丢失时,Spark程序消费kafka中数据的时候就可能会出现以下异常: 原因分析 Spark在...

  • kafka问题整理

    一、kafka高可用 二、数据丢失 1)消费端弄丢了数据 Kafka默认位移提交方式是自动提交,每隔5秒提交一次,...

  • 智齿科技

    Kafka能不能保证数据不丢失?怎么保证数据不丢失的? MySQL的存储引擎? innodb建表的时候如果不指定主...

网友评论

    本文标题:kafka数据丢失与重复

    本文链接:https://www.haomeiwen.com/subject/whdlkqtx.html