【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,并 ...
随机推荐
- mysql 修改文件记录:
增: insert t1(id, name) values(1, "alex"), (2, "wusir"), (3, "dabing" ...
- pwnable.kr col
collision - 3 pt 连接上查看col.c源码 分析一下代码, 1.hashcode等于一个固定的值 2.check_password函数取输入数据,4个一组,将输入的字符转成int,然后 ...
- IBM 3650 M3 yum upgrade后系统无法登陆问题
一.背景 IBM 3650 M3安装了centos7.2操作系统 今天yum upgrade升级centos7.6,重启系统后发现开不了机,报错如下: Failed to set MokListRT: ...
- Java HashMap、HashTable、TreeMap、WeakHashMap区别
1.HashMap不是线程安全,而HashTable是线程安全
- bootstrap登录界面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- 题解-bzoj4061 CERC-2012Farm and Factory
Problem Please contact lydsy2012@163.com! 题意概要:给定\(n\)点\(m\)边无向图,设定两个起点为\(1,2\),现要求在图中增加一个点,并将这个点与其他 ...
- zTree:一个依靠 jQuery 实现的多功能 “树插件”
官方网站: http://www.treejs.cn/v3/main.php#_zTreeInfo 使用方式: 步骤1.文件准备 将需要使用的 zTree v3.x 相关的 js.css.img 文件 ...
- sqlserver 2012 分页
--2012的OFFSET分页方式 select number from spt_values where type='p' order by number offset 10 rows fetch ...
- 基于数组的循环队列(C++模板实现)
循环队列使用数组实现的话,简单.方便.之前实现的队列,当尾端索引到达队列最后的时候,无论前面是否还有空间,都不能再添加数据了.循环队列使得队列的存储单元可以循环利用,它需要一个额外的存储单元来判断队列 ...
- django.db.utils.OperationalError: (1045, "Access denied for user 'ODBC'@'localhost' (using password)
错误描述: 从SQLLITE数据库换为MYSQL数据库,执行 python manage.py migrate 命令时,报错:django.db.utils.OperationalError: (10 ...