【Java面试】Kafka 怎么避免重复消费
Hi,大家好,我是Mic
一个工作5年的粉丝找到我。
他说: “Mic老师,你要是能回答出这个问题,我就佩服你”
我当场就懵了,现在打赌都这么随意了吗?
我问他问题是什么,他说“Kafka如何避免重复消费的问题!”
下面看看普通人和高手的回答!
普通人:
Kafka怎么避免重复消费就是我们可以通过 我们可以在那个消息消费的这一端就是我们可以用类似于分布式锁的这样一个设计吧。
我消费一个消息的时候我可以直接用比如说redis里面的setNx这样一个指令,然后去把那个消息保存到redis里面然后后面再如果重复发送的话那我就直接只要去判断这个Redis里面有没有存在就好了。
高手:
好的,关于这问题,我从几个方面来回答。
首先Kafka Broker上存储的消息,都有一个Offset标记。
然后kafka的消费者是通过offSet标记来维护当前已经消费的数据,
每消费一批数据,Kafka Broker就会更新OffSet的值,避免重复消费。
默认情况下,消息消费完以后,会自动提交Offset的值,避免重复消费。
Kafka消费端的自动提交逻辑有一个默认的5秒间隔,也就是说在5秒之后的下一次向Broker拉取消息的时候提交。
所以在Consumer消费的过程中,应用程序被强制kill掉或者宕机,可能会导致Offset没提交,从而产生重复提交的问题。
除此之外,还有另外一种情况也会出现重复消费。
在Kafka里面有一个Partition Balance机制,就是把多个Partition均衡的分配给多个消费者。
Consumer端会从分配的Partition里面去消费消息,如果Consumer在默认的5分钟内没办法处理完这一批消息。
就会触发Kafka的Rebalance机制,从而导致Offset自动提交失败。
而在重新Rebalance之后,Consumer还是会从之前没提交的Offset位置开始消费,也会导致消息重复消费的问题。
基于这样的背景下,我认为解决重复消费消息问题的方法有几个。
- 提高消费端的处理性能避免触发Balance,比如可以用异步的方式来处理消息,缩短单个消息消费的市场。或者还可以调整消息处理的超时时间。还可以减少一次性从Broker上拉取数据的条数。
- 可以针对消息生成md5然后保存到mysql或者redis里面,在处理消息之前先去mysql或者redis里面判断是否已经消费过。这个方案其实就是利用幂等性的思想。
以上就是我对这个问题的理解。
总结
重复消费这个问题很重要,如果没有考虑到就会出现线上的数据问题。
所以在面试的时候,这些问题也能够考察求职者的技术能力以及实践能力。
另外,关于幂等性的问题,我在前面的视频里面有讲,大家可以自己找一找。
喜欢我的作品的小伙伴记得点赞和收藏加关注。
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
Mic带你学架构
!
如果本篇文章对您有帮助,还请帮忙点个关注和赞,您的坚持是我不断创作的动力。欢迎关注「跟着Mic学架构」公众号公众号获取更多技术干货!
【Java面试】Kafka 怎么避免重复消费的更多相关文章
- kafka丢失和重复消费数据
Kafka作为当下流行的高并发消息中间件,大量用于数据采集,实时处理等场景,我们在享受他的高并发,高可靠时,还是不得不面对可能存在的问题,最常见的就是丢包,重发问题. 1.丢包问题:消息推送服务,每天 ...
- kafka如何保证不重复消费又不丢失数据_Kafka写入的数据如何保证不丢失?
我们暂且不考虑写磁盘的具体过程,先大致看看下面的图,这代表了 Kafka 的核心架构原理. Kafka 分布式存储架构 那么现在问题来了,如果每天产生几十 TB 的数据,难道都写一台机器的磁盘上吗?这 ...
- 关于MQ的几件小事(三)如何保证消息不重复消费
1.幂等性 幂等(idempotent.idempotence)是一个数学与计算机学概念,常见于抽象代数中. 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同.幂等函数,或 ...
- Kafka丢数据、重复消费、顺序消费的问题
面试官:今天我想问下,你觉得Kafka会丢数据吗? 候选者:嗯,使用Kafka时,有可能会有以下场景会丢消息 候选者:比如说,我们用Producer发消息至Broker的时候,就有可能会丢消息 候选者 ...
- Kafka 使用Java实现数据的生产和消费demo
前言 在上一篇中讲述如何搭建kafka集群,本篇则讲述如何简单的使用 kafka .不过在使用kafka的时候,还是应该简单的了解下kafka. Kafka的介绍 Kafka是一种高吞吐量的分布式发布 ...
- kafka一直rebalance故障,重复消费
今天我司线上kafka消息代理出现错误日志,异常rebalance,而且平均间隔2到3分钟就会rebalance一次,分析日志发现比较严重.错误日志如下 08-09 11:01:11 131 pool ...
- Kafka如何保证百万级写入速度以及保证不丢失不重复消费
一.如何保证百万级写入速度: 目录 1.页缓存技术 + 磁盘顺序写 2.零拷贝技术 3.最后的总结 “这篇文章来聊一下Kafka的一些架构设计原理,这也是互联网公司面试时非常高频的技术考点. Kafk ...
- Kafka重复消费和丢失数据研究
Kafka重复消费原因 底层根本原因:已经消费了数据,但是offset没提交. 原因1:强行kill线程,导致消费后的数据,offset没有提交. 原因2:设置offset为自动提交,关闭kafka时 ...
- kafka consumer重复消费问题
在做分布式编译的时候,每一个worker都有一个consumer,适用的kafka+zookeep的配置都是默认的配置,在消息比较少的情况下,每一个consumer都能均匀得到互不相同的消息,但是当消 ...
随机推荐
- Js中的三个错误语句:try、catch、throw
Js中的三个错误语句:try.catch.throw
- RPC及Dubbo和ZooKeeper的安装
RPC及Dubbo和ZooKeeper的安装 RPC 通信有两种方式:HTTP(无状态协议,通信协议),RPC(远程过程调用) 它两的本质没有区别,只是功能有点不一样 官方解释: RPC是指远程过程调 ...
- css 实现图片专场
<template> <div> </div> </template> <style lang="scss"> html ...
- android软件简约记账app开发day10-主页面模块--头信息的展示,和之后功能完善的目标。
android软件简约记账app开发day10-主页面模块--头信息的展示,和之后功能完善的目标. 今天来写主界面头信息的展示,也就是将第一天的写的layout中的item_main_top展示到主界 ...
- python基础练习题(题目 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单)
day14 --------------------------------------------------------------- 实例022:比赛对手 题目 两个乒乓球队进行比赛,各出三人. ...
- 分享两个实用的shell脚本
各位,早上好啊~ 发现许久没有分享过技术文章了,今天分享两个部署项目时候比较实用的shell脚本 一键部署shell脚本 由于个人部署,会习惯把jar放到lib目录下面,如果你没有这个习惯,可以适当做 ...
- zookeeper篇-zk的选举机制
点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. 说说zk的选举机制 基础概念 zxid=事务id=一个时间戳,代表当前事 ...
- jquery 动态 给select赋值
<div class="right_left"> <select id="supply"> <option>请选择供应商&l ...
- 前端 pickerview 的效果 实现 省市区 三级联动
效果图 需要引入 大佬写的js 以及 css 源文件里面有大佬的地址 这是我存在gitee上的文件 https://gitee.com/depressiom/address-pickview-effe ...
- cnvd进阶学习
说明 cnvd相对在src漏洞平台中还是比较具备含金量的.今天证书的申请标准就不说了,总归网上都有,主要是想分享下怎么去挖漏洞. 咱们这里只讲通用型漏洞,事件型的暂时我也没挖到.挖通用型漏洞主要方法就 ...