rdkafka 保存offset到本地文件

本文介绍了如何利用librdkafka库将offset保存到本地文件以实现断点续传。通过设置topic配置的offset.store.path和offset.store.method,程序运行时会在当前目录下创建文件保存offset。offset的写入可通过调整offset.store.sync.interval.ms进行控制。启动时,可预先写入offset。更多详细配置可参考librdkafka的官方文档。

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

               

为了支持断点续传功能,需要将offset保存在一个地方,下次从这个offset开始。librdkafka提供了本地文件保存的方式。

下面的代码演示了

1. 要用topic config对象设置 offset.store.path和offset.store.method

2. start函数接受参数OFFSET_STORED

  std::unique_ptr<RdKafka::Consumer> consumer(RdKafka::Consumer::create(global_conf_.get(), err_));  if (!consumer) {   throw KafkaError("Failed to create consumer");  }  stringstream stream;  stream << topic_name_ << "-" << partition_idx << ".txt";  string file_path = stream.str();  string lasterr;  topic_conf_->set("offset.store.path", file_path, lasterr);  topic_conf_->set("offset.store.method", "file", lasterr);  std::unique_ptr<RdKafka::Topic> topic(RdKafka::Topic::create(consumer.get(), topic_name_, topic_conf_.get(), err_));  //  RdKafka::ErrorCode resp = consumer->start(topic.get(), partition_idx, RdKafka::Topic::OFFSET_BEGINNING);  RdKafka::ErrorCode resp = consumer->start(topic.get(), partition_idx, RdKafka::Topic::OFFSET_STORED);  if (resp != RdKafka::ERR_NO_ERROR) {   throw KafkaError(RdKafka::err2str(resp));  }

注意:

1. 当前进程目录下会出现$topic-$partiton-idx.txt文件

2. 运行后正常读取数据后需要过一会儿才会写入数值

这个写入时间可以设置:offset.store.sync.interval.ms

3. 程序启动时,可以先手动将offset写入文件,然后再启动


详细配置参考github

https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md


           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值