之前写过两篇关于重置offset的博文,后来使用过程中都有问题。

经过各种尝试,终于找到了解决方案。

直接上代码:

# coding=utf8

from confluent_kafka import Consumer, KafkaError, TopicPartition

def reset(topic, group, partition, new_offset):
broker_list = "xx.xx.xx.xx:9092,xx.xx.xx.xx:9092"
new_offset = int(new_offset) - 1 #从new_offset-1的地方开始消费,这样消费一条后提交就是new_offset位置
tp_c = TopicPartition(topic, partition, new_offset)
c = Consumer({'bootstrap.servers': broker_list,
'group.id': group,
'enable.auto.commit': True, # 把自动提交打开
'default.topic.config': {'auto.offset.reset': 'smallest'}})
c.assign([tp_c])
c.poll() def reset_offset(topic, group, partition, new_offset):
while True:
try:
reset(topic, group, partition, new_offset)
break
except:
print "ERROR in reset, repeat."
continue if __name__ == "__main__":
reset_offset("test1", "test1", 0, 100)

代码中的while循环是防止有时连不上kafka服务器报错。

很奇怪,我直接用c.commit(offsets=[tp_c])不起作用,非要我消费后它自动重置才有效。

附,重置offset到最大值的操作。比上面多出了获取最大值的部分代码。

# coding=utf8

from confluent_kafka import Consumer, KafkaError, TopicPartition

def reset(topic, group):
broker_list = "xx.xx.xx.xx:9092,xx.xx.xx.xx:9092"
c = Consumer({'bootstrap.servers': broker_list,
'group.id': group,
'enable.auto.commit': False,
'default.topic.config': {'auto.offset.reset': 'smallest'}})
c.subscribe([topic]) # 这一句必须有,否则后面get_watermark_offsets会报错 Failed to get watermark offsets: Broker: Leader not available
tp = TopicPartition(topic, 0)
committed = c.committed([tp]) # 这一句必须有,否则后面get_watermark_offsets会报错 Failed to get watermark offsets: Broker: Leader not available
print "committed: %s" % committed[0].offset
watermark_offsets = c.get_watermark_offsets(tp)
print "watermark_offsets:%s %s" % (watermark_offsets[0], watermark_offsets[1])
new_offset = int(watermark_offsets[1]) - 1
print new_offset
tp_c = TopicPartition(topic, 0, new_offset) c = Consumer({'bootstrap.servers': broker_list,
'group.id': group,
'enable.auto.commit': True, # 把自动提交打开
'default.topic.config': {'auto.offset.reset': 'smallest'}})
c.assign([tp_c])
c.poll() def reset_offset(topic, group):
while True:
try:
reset(topic, group)
break
except:
print "ERROR in reset, repeat."
continue if __name__ == "__main__":
reset_offset("test1", "test1")

注意: subscribe和assign是不能同时使用的。subscribe表示订阅topic,从kafka记录的offset开始消费。assign表示从指定的offset开始消费。

问题:

1.为何获取watermark_offsets必须要使用subscribe和committed,不使用就报错Failed to get watermark offsets: Broker: Leader not available?

2.c.commit(offsets=[tp]) 在什么情况下有效?

【kafka】confluent_kafka重置offset的更多相关文章

  1. kafka reset offset 手工重置offset

    1.场景 a)有时消费端逻辑修改,需要重复消费数据,需要将offset设置到指定位置. 2.实现 kafka版本:0.11.* KIP-122: Add Reset Consumer Group Of ...

  2. kafka重置offset

    kafka重置offset   1.删除zookeeper上节点信息 打开client :./zkCli.sh -server 127.0.0.1:12181 删除consumer:rmr /cons ...

  3. 【python】confluent_kafka将offset置为最大

    该博文方法有问题,正确方案在http://www.cnblogs.com/dplearning/p/7992994.html 将指定group对应的offset重置到最大值,跳过未消费数据 代码如下: ...

  4. 【Spark】Spark Streaming + Kafka direct 的 offset 存入Zookeeper并重用

    Spark Streaming + Kafka direct 的 offset 存入Zookeeper并重用 streaming offset设置_百度搜索 将 Spark Streaming + K ...

  5. Kafka设计解析(十二)Kafka 如何读取offset topic内容 (__consumer_offsets)

    转载自 huxihx,原文链接 Kafka 如何读取offset topic内容 (__consumer_offsets) 众所周知,由于Zookeeper并不适合大批量的频繁写入操作,新版Kafka ...

  6. Spark Streaming消费Kafka Direct保存offset到Redis,实现数据零丢失和exactly once

    一.概述 上次写这篇文章文章的时候,Spark还是1.x,kafka还是0.8x版本,转眼间spark到了2.x,kafka也到了2.x,存储offset的方式也发生了改变,笔者根据上篇文章和网上文章 ...

  7. Kafka Topic Partition Offset 这一长串都是啥?

    摘要:Offset 偏移量,是针对于单个partition存在的概念. 本文分享自华为云社区<Kafka Topic Partition Offset 这一长串都是啥?>,作者: gent ...

  8. kafka手动设置offset

    项目中经常有需求不是消费kafka队列全部的数据,取区间数据 查询kafka最大的offset: ./kafka-run-class.sh kafka.tools.GetOffsetShell --b ...

  9. Kafka 如何读取offset topic内容 (__consumer_offsets)

    众所周知,由于Zookeeper并不适合大批量的频繁写入操作,新版Kafka已推荐将consumer的位移信息保存在Kafka内部的topic中,即__consumer_offsets topic,并 ...

随机推荐

  1. Spark思维导图之内存管理

  2. mysql常用命令及语法规范

    mysql命令不区分大小写,函数和关键字建议使用大写字母,以分号结束语句. 显示当前服务器版本 SELECT VERSION(); 显示当前时间 SELECT NOW(); 显示当前用户 SELECT ...

  3. XML解析技术-dom4j

  4. Python问题:'Nonetype' object is not iterable

    参考链接:http://blog.csdn.net/dataspark/article/details/9953225 [解析] 这个错误提示一般发生在将None赋给多个值时. [案例] 定义了如下的 ...

  5. 【转载】双调排序Bitonic Sort,适合并行计算的排序算法

    双调排序是data-independent的排序, 即比较顺序与数据无关的排序方法, 特别适合做并行计算,例如用GPU.fpga来计算. 1.双调序列 在了解双调排序算法之前,我们先来看看什么是双调序 ...

  6. P3168 [CQOI2015]任务查询系统

    题目地址:P3168 [CQOI2015]任务查询系统 主席树的模板题 更模板的在这儿:P3834 [模板]可持久化线段树 1(主席树) 形象的说,P3834是"单点修改,区间查询" ...

  7. Redis主从哨兵和集群搭建

    主从配置 哨兵配置 集群配置 1.主从: 国王和丞相,国王权力大(读写),丞相权利小(读) 2.哨兵: 国王和王子,国王死了(主服务挂掉),王子继位(从服务变主服务) 3.集群: 国王和国王,一个国王 ...

  8. CentOS6源码安装VSFTPD3

    还是碰到老问题:安全扫描,由于CentOS6上VSFTPD最高支持到V2.2.2,目前已经是官方支持的最新版本(发布了几年...) 但有安全漏洞,又没法通过限制访问进行控制,只能想办法升级到最新版本了 ...

  9. boost常用库案例

    1.boost::any boost::any是一种通用的数据类型,可以将各种类型包装后统一放入容器内,最重要的它是类型安全的.有点象COM里面的variant. 使用方法: any::type()  ...

  10. 1、git基础介绍及远程/本地仓库、分支

    1. Git基础介绍 基于Git进行开发时,首先需要将远程仓库代码clone到本地,即为本地仓库.后续大部分时间都是基于本地仓库上的分支进行编码,最后将本地仓库的代码合入远程仓库. 1.1. 远程仓库 ...