【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,并 ...
随机推荐
- 浅谈linux线程切换问题
http://www.jb51.net/article/102059.htm 处理器总处于以下状态中的一种: 1.内核态,运行于进程上下文,内核代表进程运行于内核空间 2.内核态,运行于中断上下文,内 ...
- Element Select 回显
有思考有痛点的朋友可以聊聊(要求:认真看过Element相关文档,对该场景自己有过多角度的探索) 下拉框回显的关键点:要回显的值包含于下拉列表的数组中 demo图 最近遇到一个需求抽象下:循环中下拉框 ...
- 【CentOS】MySQL的安装
版本信息:CentOS 7.2 64位 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red ...
- HashSet去除List重复元素
使用Hashset 去重复 例一,List<String> 去重复 public class main { public static void main(String[] args) { ...
- Javascript - ExtJs - ToolTip组件
一个浮动的提示信息组件…… Ext, //可选 指定箭头的位置 anchor: 'buttom', ...
- Django实战(一)-----用户登录与注册系统4(表单)
我们前面都是手工在HTML文件中编写表单form元素,然后在views.py的视图函数中接收表单中的用户数据,再编写验证代码进行验证,最后使用ORM进行数据库的增删改查.这样费时费力,整个过程比较复杂 ...
- C#解析"a=1&b=2&c=3"字符串,微信支付返回字符串,替换<br>为&
原文来自: http://www.mzwu.com/article.asp?id=2802 C#可用: 若该字符串是使用Http Get发送,url?a=1&b=2&c=3,使用下边代 ...
- P3168 [CQOI2015]任务查询系统
题目地址:P3168 [CQOI2015]任务查询系统 主席树的模板题 更模板的在这儿:P3834 [模板]可持久化线段树 1(主席树) 形象的说,P3834是"单点修改,区间查询" ...
- 判断HDFS文件是否存在
hadoop判断文件是否存在 在shell中判断一个HDFS目录/文件是否存在 直接看shell代码: hadoop fs -test -e /hdfs_dirif [ $? -ne 0 ]; the ...
- LwIP Application Developers Manual9---LwIP and multithreading
1.前言 lwIP的内核并不是线程安全的.如果我们必须在多线程环境里使用lwIP,那么我们必须使用“upper”API层的函数(netconn或sockets).当使用raw API时,你需要自己保护 ...