shell更新kafka的offset到最新的位置

19 篇文章 0 订阅

docker更新kafka的offset到最新的位置

1.进入docker容器,用来执行kafka相关的更新offset的命令;

docker ps | grep kafka | awk '{print $1}'

2.执行如下命令,用来将执行kafka集群中的groupId的offset更新为最新;

/opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server 172.19.32.116:9192  --group fang-groupid-105  --reset-offsets --all-topics --to-latest --execute

其中,命令解读

  • –group 表示需要更新offset的位置;
  • –reset-offsets 将该groupId相关的offset重新为最新;
  • –all-topics 表示该groupId相关联的所有topic全部执行
  • –to-latest 表示执行更新offset到最新的位置

备注:https://blog.csdn.net/zzti_erlie/article/details/93637932

可能的执行结果如下:

bash-4.4# /opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server 172.19.32.116:9192  --group fang-groupid-105  --reset-offsets --all-topics --to-latest --execute
Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 29998; nested exception is: 
	java.net.BindException: Address in use (Bind failed)
sun.management.AgentConfigurationError: java.rmi.server.ExportException: Port already in use: 29998; nested exception is: 
	java.net.BindException: Address in use (Bind failed)
	at sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:480)
	at sun.management.Agent.startAgent(Agent.java:262)
	at sun.management.Agent.startAgent(Agent.java:452)
Caused by: java.rmi.server.ExportException: Port already in use: 29998; nested exception is: 
	java.net.BindException: Address in use (Bind failed)
	at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:346)
	at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:254)
	at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:411)
	at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
	at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:236)
	at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:213)
	at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:173)
	at sun.management.jmxremote.SingleEntryRegistry.<init>(SingleEntryRegistry.java:49)
	at sun.management.jmxremote.ConnectorBootstrap.exportMBeanServer(ConnectorBootstrap.java:816)
	at sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:468)
	... 2 more
Caused by: java.net.BindException: Address in use (Bind failed)
	at java.net.PlainSocketImpl.socketBind(Native Method)
	at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
	at java.net.ServerSocket.bind(ServerSocket.java:375)
	at java.net.ServerSocket.<init>(ServerSocket.java:237)
	at java.net.ServerSocket.<init>(ServerSocket.java:128)
	at sun.rmi.transport.proxy.RMIDirectSocketFactory.createServerSocket(RMIDirectSocketFactory.java:45)
	at sun.rmi.transport.proxy.RMIMasterSocketFactory.createServerSocket(RMIMasterSocketFactory.java:345)
	at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:666)
	at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:335)
	... 11 more

该错误参考文献:https://github.com/apache/kafka/pull/1983/commits/2c5d40e946bcc149b1a9b2c01eced4ae47a734c5

如需要修复该问题,参考网上的方式,加入的位置详见上文的链接;

需要修改/opt/kafka/bin/kafka-run-class.sh,即kafka-run-class.sh文件中部分内容;

################# 第一处添加如下:by fang ################################ 
ISKAFKASERVER="false"                                                              
if [[ "$*" =~ "kafka.Kafka" ]]; then                                               
    ISKAFKASERVER="true"                                                           
fi  

################## 第二处修改如下:by fang ###############################
# JMX port to use    
if [  $JMX_PORT ] && [ -z "$ISKAFKASERVER" ]; then          
  KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "                                             
fi 

备注:目前已经在172.19.32.101上已经修改了上面的配置,如果重启容器仍然需要重新配置该过程。即,对应的更新offset脚本可以在这个机器上面执行即可;

最后,重新执行操作即可,如下所示,示例topic:fang-topic-105已经将所有的offset置为最新;

bash-4.4# /opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server 172.19.32.116:9192  --group fang-groupid-105  --reset-offsets --all-topics --to-latest --execute

TOPIC                          PARTITION  NEW-OFFSET     
fang-topic-105                 3          410            
fang-topic-105                 1          402            
fang-topic-105                 2          381            
fang-topic-105                 0          351            
fang-topic-105                 4          366            
fang-topic-105                 5          404      

如果需要批量的跟新groupid的offset值,使用如下脚本即可

#/bin/bash

echo "######################################"
echo "[note]: this batch will be update kafka offset to latest!!"
KAFKA_CONTAINER_ID=$(docker ps | grep kafka | awk '{print $1}' )
echo "KAFKA_CONTAINER_ID"=$KAFKA_CONTAINER_ID
echo "======================================"

docker exec -it $KAFKA_CONTAINER_ID /bin/bash -c "/opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server 172.19.32.116:9192  --group fang-groupid-105  --reset-offsets --all-topics --to-latest --execute; \
/opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server 172.19.32.116:9192  --group fang-groupid-106  --reset-offsets --all-topics --to-latest --execute"

echo "[successfully] update kafka offset finished !!"

注意:当更新多个groupid的时候,注意加上英文分号; 如果入市需要换行显示加上反斜杠 \;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值