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是标准)。

 

posted @   雷雨客  阅读(846)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示