kafka中配置是否接收旧数据(group.id与auto.offset.reset)
使用java作为客户端时,可以通过配置消费端控制是否接收旧数据,先理解下面几个配置:
1、group.id
分组,相同group.id的客户端是一组,可以简单把相同组的客户端看成是一个客户端,某数据被组内某个客户端消费了,组内其它客户端不能再消费
2、auto.offset.reset
有两个值,latest(默认)和earliest。 区别在于第一次启动: 当配置为latest时,第一次启动不会消费旧数据,只消费consumer客户端启动之后,生产者发送的数据; 当配置为earliest时,consumer客户端第一次启动会消费旧数据,即从offset为0(生产者最初发的数据)开始消费
备注:无论latest还是earliest,如果不是第一次启动(即consumer客户端停止后再次启动),都从没消费的数据开始消费(不是offset为0)
疑问:再次启动时,某些数据为何仍会重复消费(通常比较少,且重复数据条数不固定)?
这是因为如果设置了自动提交(见下面的3和4),虽然消费者消费了数据,但是还没来得及提交修改服务器的offset值,服务器不会认为此数据被消费了
3、enable.auto.commit
有两个值,true(默认)和false,true是自动提交,false是手动提交 提交的含义:简单理解为消费了数据,通知服务器修改offset的值。生产者产生的数据offset值从0开始依次递增
4、auto.commit.interval.ms
设置enable.auto.commit为true时,间隔多久自动提交,默认5000ms,当enable.auto.commit为false时此配置无效
通过上面的几个配置可总结如下:
1)如果auto.offset.reset设置为earliest,消费端第一次启动能接收到最初的旧数据。
2)同一个客户端再次启动也想获取最初的数据,那么auto.offset.reset为earliest的同时,修改group.id为不同的值就可以了。
3)是否第一次启动与group.id相关,修改了group.id再次启动,依旧是第一次启动(group.id是标准)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结