之前写过两篇关于重置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. 5-24 css内容的补充

    1,标准文档流 宏观的将,我们的web页面和ps等设计软件有本质的区别,web 网页的制作,是个“流”,从上而下 ,像 “织毛衣”.而设计软件 ,想往哪里画东西,就去哪里画 标准文档流下 有哪些微观现 ...

  2. linux 共享内存的理解

    1.  共享内存是在shmget时创建出来的, 在 shmget(USER_SHARE_MEM_KEY,  sizeof(ADDR_NODE) , IPC_CREAT|0666)) ==-1) 的 s ...

  3. javascript 的类式继承(构造函数)

    <script type="text/javascript"> //类式继承(构造函数) var father = function(){ this.age = 52; ...

  4. 前端-----css(1)

    css概述 CSS是Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离. css知识点 注释 /* 注释内容 */ css四 ...

  5. flask 连接mysql及基本操作

    #导入第三方连接库sql点金术 from flask_sqlalchemy import SQLAlchemy #建立对象 app = Flask(__name__) #载入配置文件 app.conf ...

  6. 20165221 JAVA第五周学习心得

    课本知识点 内部类与异常类 内部类:在一个类中定义另一个类 特点:外嵌类的成员在内部类仍然有效,内部类也可调用外嵌类的方法,内部类的类体不能声明类变量及类方法 非内部类不能是static类 匿名类:创 ...

  7. SpringBoot整合全局异常处理&SpringBoot整合定时任务Task&SpringBoot整合异步任务

    ============整合全局异常=========== 1.整合web访问的全局异常 如果不做全局异常处理直接访问如果报错,页面会报错500错误,对于界面的显示非常不友好,因此需要做处理. 全局异 ...

  8. Oracle根据【日期】组,其他条件根据PIVOT行转列。使每个日期条件关联的其他数据只有一行。

    select OPER_TIME, MICROPAY, REFUND from ( select trunc(oper_time) oper_time, class_name, sum(total_f ...

  9. python numpy 三行代码打乱训练数据

    今天发现一个用 numpy 随机化数组的技巧. 需求 我有两个数组( ndarray ):train_datasets 和 train_labels.其中,train_datasets 的每一行和 t ...

  10. Zynq-Linux移植学习笔记之27UIO机制响应外部中断实现【转】

    转自:https://blog.csdn.net/zhaoxinfan/article/details/80285150 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...