kafka 问题 client fails trying to bind to jmx port already in use by server

kafka 问题处理

报错内容

kafka 创建 topic 报错

Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 9988; nested exception is: 
	java.net.BindException: Address already in use (Bind failed)
I have no name!@kafka-0:/$ kafka-topics.sh --create --topic test --zookeeper zookeeper-0.zk-headless.infra.svc.cluster.local:2181,zookeeper-1.zk-headless.infra.svc.cluster.local:2181,zookeeper-2.zk-headless.infra.svc.cluster.local:2181 --partitions 3 --replication-factor 2
Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 9988; nested exception is: 
	java.net.BindException: Address already in use (Bind failed)
sun.management.AgentConfigurationError: java.rmi.server.ExportException: Port already in use: 9988; nested exception is: 
	java.net.BindException: Address already 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: 9988; nested exception is: 
	java.net.BindException: Address already 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:237)
	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 already 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

[root@es-master21 mnt]# vim /mnt/kafka/kafka-run-class.sh
 ......
 40   file=$1
 41   if [ -z "$(echo "$file" | egrep "$regex")" ] ; then
 42     return 0
 43   else
 44     return 1
 45   fi
 46 }
 ------加入以下4行配置------
ISKAFKASERVER="false"
if [[ "$*" =~ "kafka.Kafka" ]]; then
    ISKAFKASERVER="true"
fi
 ------------以上-----------
 51 base_dir=$(dirname $0)/..

 192 # JMX port to use
#if [  $JMX_PORT ]; then       #注释掉这一行
if [  $JMX_PORT ] && [ -z "$ISKAFKASERVER" ]; then     #添加这一行新的配置进去
 195   KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "
 196 fi
 197
 198 # Log directory to use
 199 if [ "x$LOG_DIR" = "x" ]; then
 200   LOG_DIR="$base_dir/logs"
 201 fi
 ......

重新制作镜像

docker run --name kafka001 -d -it docker.io/bitnami/kafka:2.3.0-debian-9-r4 bash
docker cp kafka001:/opt/bitnami/kafka/bin/kafka-run-class.sh kafka-run-class.sh
docker rm -f kafka001

vim kafka-run-class.sh


cat <<"EOF"> Dockerfile
FROM docker.io/bitnami/kafka:2.3.0-debian-9-r4

ADD kafka-run-class.sh /opt/bitnami/kafka/bin/kafka-run-class.sh

EOF

chmod +x kafka-run-class.sh

imageName="harbor.test.com/tools/kafka:2.3.0-debian-9-r4-run-2"
docker build -t ${imageName} .

docker push ${imageName}

# 将 kafka 的镜像修改为 harbor.test.com/tools/kafka:2.3.0-debian-9-r4-run-2
posted @ 2023-01-30 14:51  merrickzhang  阅读(271)  评论(0编辑  收藏  举报