kafka消费者offset记录位置和方式

本文详细解析了Kafka消费者如何存储和更新其消费进度(Offset)。根据使用的API不同,Offset可能存储在Zookeeper或Kafka的__consumer_offsets主题中。文章还介绍了两种更新Offset的方式:自动提交和手动提交,并解释了各自的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 前言

kafka消费者在会保存其消费的进度,也就是offset,存储的位置根据选用的kafka-api不同而不同。

2. zookeeper存储

首先来说说消费者如果是根据java-api来消费,也就是kafka.javaapi.consumer.ConsumerConnector,通过配置参数zookeeper.connect来消费。这种情况下,消费者的offset会更新到zookeeper的consumers/{group}/offsets/{topic}/{partition}目录下,例如:

[zk: 100.5.14.161:2181(CONNECTED) 20] get /consumers/console-consumer-21030/offsets/topic_test_1/0
37
cZxid = 0x50000053a
ctime = Thu Dec 20 17:26:58 CST 2018
mZxid = 0x50000053a
mtime = Thu Dec 20 17:26:58 CST 2018
pZxid = 0x50000053a
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 2
numChildren = 0

3. kafka topic存储

如果是根据kafka默认的api来消费,即org.apache.kafka.clients.consumer.KafkaConsumer,我们会配置参数bootstrap.servers来消费。而其消费者的offset会更新到一个kafka自带的topic:__consumer_offsets下面,查看当前group的消费进度,则要依靠kafka自带的工具kafka-consumer-offset-checker,例如:

[2018-12-25 11:48:10,163] WARN WARNING: ConsumerOffsetChecker is deprecated and will be dropped in releases following 0.9.0. Use ConsumerGroupCommand instead. (kafka.tools.ConsumerOffsetChecker$)
Group           Topic                          Pid Offset          logSize         Lag             Owner
test_group_1    topic_test_1                   0   489             491             2               none
test_group_1    topic_test_1                   1   489             490             1               none
test_group_1    topic_test_1                   2   490             491             1               none

4. offset更新方式

offset更新的方式,不区分是用的哪种api,大致分为两类:

  • 自动提交,设置enable.auto.commit=true,更新的频率根据参数【auto.commit.interval.ms】来定。这种方式也被称为【at most once】,fetch到消息后就可以更新offset,无论是否消费成功。
  • 手动提交,设置enable.auto.commit=false,这种方式称为【at least once】。fetch到消息后,等消费完成再调用方法【consumer.commitSync()】,手动更新offset;如果消费失败,则offset也不会更新,此条消息会被重复消费一次。

参考: https://blog.youkuaiyun.com/u013063153/article/details/78122088
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值