系统运维系列 之Kafka手动设置offset(经典方法总结)
Posted 琅晓琳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统运维系列 之Kafka手动设置offset(经典方法总结)相关的知识,希望对你有一定的参考价值。
1 问题背景
在使用Kafka消费数据过程中,消费程序可能出现运行问题,导致消费不及时,消息堆积很多;尤其是消息消费后需要进行一列后处理,这种情况下就需要考虑一些方法来进行消费参数的设置。
2 举例
测试集群中有3台服务器,分别设置为Kafka的3个分区,分别为分区1,分区2和分区3,由于消费者出现运行问题,导致无法消费数据或者仅消费1到2个分区的数据,这时候分区中堆积的数据很多,达到百万级别甚至千万级别,由于消息消费后需要进行后续处理,按照正常速度消费需要较长时间才可以消费完这些堆积数据,且消费过程中会影响实时消息的消费情况,这样会形成一个恶性循环。
3 解决方案
3.1 利用–reset-offsets进行设置,此方法要求*Kafka版本在0.11.以上
步骤1:查询topic的offset的范围
#最小值
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list AAA:9092 -topic test --time -2
#最大值
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list AAA:9092 -topic test --time -1
步骤2:利用–reset-offsets命令进行偏置量的重置
#to-offset后面的数字代表前面查到的最小值到最大值范围中的数据
bin/kafka-consumer-groups.sh --bootstrap-server ip:9092 --group groupName --reset-offsets --to-offset 10000 --topic test --execute
#将任意主题重置到最早位置消费
bin/kafka-consumer-groups.sh --bootstrap-server ip:9092 --group groupName --reset-offsets --all-topics --to-earliest –execute
#更新到当前offset位置
bin/kafka-consumer-groups.sh --bootstrap-server ip:9092 --group groupName --reset-offsets --all-topics --to-current --execute
#把位移调整到分区当前最新位移
bin/kafka-consumer-groups.sh --bootstrap-server ip:9092 --group groupName --reset-offsets --all-topics --to-latest --execute
#offset设置到指定时刻开始
bin/kafka-consumer-groups.sh --bootstrap-server ip:9092 --group groupName --reset-offsets --all-topics --to-datetime 2021-10-25T12:30:00.000
#参数
--execute:执行真正的位移调整
--export:把位移调整方案按照CSV格式打印,方便用户成csv文件,供后续直接使用
步骤3:其余脚本补充
#查看 kafka 消费者组列表
/bin/kafka-consumer-groups.sh --bootstrap-server ip:9092 --list
#查看指定消费者的offset
bin/kafka-consumer-groups.sh --bootstrap-server ip:9092 --describe --group groupName
3.2 设置consumer group的offset
步骤1:启动zookeeper client
/zookeeper/bin/zkCli.sh
步骤2:通过下面命令设置consumer group:groupName topic:test partition:0的offset为10000
set /kafka/consumers/groupName/offsets/test/0 10000
步骤3:重启相关的应用程序
3.3 “暴力”方法
步骤1:原理:Kafka凭什么速度那么快?
Kafka的消息是保存或缓存在磁盘上的,一般认为在磁盘上读写数据是会降低性能的,因为寻址会比较消耗时间,但是实际上,Kafka的特性之一就是高吞吐率。
即使是普通的服务器,Kafka也可以轻松支持每秒百万级的写入请求,超过了大部分的消息中间件,这种特性也使得Kafka在日志处理等海量数据场景广泛应用。
步骤2:Kafka消费者如何控制消费速度
步骤3:在应用程序侧修改,比如可修改消息的后处理程序部分,提升消息的消费速度等。
参考资料:
http://www.wallcopper.com/linux/3873.html kafka 重置偏移reset-topic
https://blog.csdn.net/yxgxy270187133/article/details/53666760?t=1502933725546 修改kafka topic的offset几种方法
https://blog.csdn.net/ZouChengli/article/details/82587404?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-6.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-6.no_search_link Kafka手动设置offset
https://zhuanlan.zhihu.com/p/66482461 Kafka凭什么速度那么快?
https://www.cnblogs.com/yangxusun9/p/13049132.html Kafka消费者如何控制消费速度
以上是关于系统运维系列 之Kafka手动设置offset(经典方法总结)的主要内容,如果未能解决你的问题,请参考以下文章
系统运维系列 之java中连接oracle数据库并进行数据读写