【kafka】confluent_kafka重置offset
之前写过两篇关于重置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的更多相关文章
- kafka reset offset 手工重置offset
1.场景 a)有时消费端逻辑修改,需要重复消费数据,需要将offset设置到指定位置. 2.实现 kafka版本:0.11.* KIP-122: Add Reset Consumer Group Of ...
- kafka重置offset
kafka重置offset 1.删除zookeeper上节点信息 打开client :./zkCli.sh -server 127.0.0.1:12181 删除consumer:rmr /cons ...
- 【python】confluent_kafka将offset置为最大
该博文方法有问题,正确方案在http://www.cnblogs.com/dplearning/p/7992994.html 将指定group对应的offset重置到最大值,跳过未消费数据 代码如下: ...
- 【Spark】Spark Streaming + Kafka direct 的 offset 存入Zookeeper并重用
Spark Streaming + Kafka direct 的 offset 存入Zookeeper并重用 streaming offset设置_百度搜索 将 Spark Streaming + K ...
- Kafka设计解析(十二)Kafka 如何读取offset topic内容 (__consumer_offsets)
转载自 huxihx,原文链接 Kafka 如何读取offset topic内容 (__consumer_offsets) 众所周知,由于Zookeeper并不适合大批量的频繁写入操作,新版Kafka ...
- Spark Streaming消费Kafka Direct保存offset到Redis,实现数据零丢失和exactly once
一.概述 上次写这篇文章文章的时候,Spark还是1.x,kafka还是0.8x版本,转眼间spark到了2.x,kafka也到了2.x,存储offset的方式也发生了改变,笔者根据上篇文章和网上文章 ...
- Kafka Topic Partition Offset 这一长串都是啥?
摘要:Offset 偏移量,是针对于单个partition存在的概念. 本文分享自华为云社区<Kafka Topic Partition Offset 这一长串都是啥?>,作者: gent ...
- kafka手动设置offset
项目中经常有需求不是消费kafka队列全部的数据,取区间数据 查询kafka最大的offset: ./kafka-run-class.sh kafka.tools.GetOffsetShell --b ...
- Kafka 如何读取offset topic内容 (__consumer_offsets)
众所周知,由于Zookeeper并不适合大批量的频繁写入操作,新版Kafka已推荐将consumer的位移信息保存在Kafka内部的topic中,即__consumer_offsets topic,并 ...
随机推荐
- mui列表系列
详细操作见代码: <!doctype html> <html> <head> <meta charset="UTF-8"> < ...
- 「LibreOJ Round #6」花火
转化思维的好题! 链接:here 大致题意: 有$ n$个数字,你每次可以交换相邻两个,还有一次交换任意两个元素的机会,求最少的交换次数使得这些数字升序排序(原数列两两不同) $ solotion:$ ...
- 算法 - 链的操作(三) - 返回倒数第k个节点(no.23)
输入一个链 : 1 -> 3 -> 5 -> 6 -> 8 输入 k = 2 返回 6 这个节点 python(2.7) def getNode(head, k): if(h ...
- Javascript入门(三)函数
Javascript函数 一.函数定义与执行 <script type="text/javascript"> //define function fun1(){ ale ...
- About me & OI这一年
1 最近碰到一些 OIers 问我学 OI 的经历 回忆了一下,我做的第一道题是A+B Problem,时间:2018年2月15日 呀,正好一年了 2 我是来自 HB 的 OIer 一枚 现在高一,就 ...
- 【SVN】CentOS7.0下搭建SVN服务器
SVN服务器搭建 最近接手了天赋吉运的SVN项目管理,那么学会搭建SVN服务器就成为了必须的技能.这篇文章就来讲一讲在CentOS7.0下如何搭建SVN服务器 1,下载安装SVN版本 yum inst ...
- Pytorch tutorial 之Datar Loading and Processing (2)
上文介绍了数据读取.数据转换.批量处理等等.了解到在PyTorch中,数据加载主要有两种方式: 1. 自定义的数据集对象.数据集对象被抽象为Dataset类,实现自定义的数据集需要继承Dataset. ...
- 查询tensorflow中的函数用法
一下均在ubuntu环境下: (1)方法一,使用help()函数: 比如对于tf.placeholder(),在命令行中输入import tensorflow as tf , help(tf.plac ...
- H5混合开发app常用代码
1.Android与H5互调可以让我们的实现混合开发,至于混合开发就是在一个App中内嵌一个轻量级的浏览器(高性能webkit内核浏览器),一部分原生的功能改为Html 5来开发.然后这个浏览器又封装 ...
- MongoDB 的 upsert
MongoDB 的update 方法的三个参数是upsert,这个参数是个布尔类型,默认是false.当它为true的时候,update方法会首先查找与第一个参数匹配的记录,在用第二个参数更新之,如果 ...