You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用JMX后ksql-test-runner报端口占用错误的求助

问题:启用JMX的ksqlDB服务器导致ksql-test-runner端口冲突

运行ksql-test-runner时出现JMX端口占用错误,具体报错如下:

sh-4.4$ ksql-test-runner -s /testing/ksql-statements-enhanced.ksql -i /testing/input.json -o /testing/output.json

OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
Error: JMX connector server communication error: service:jmx:rmi://primary-ksqldb-server:1089
jdk.internal.agent.AgentConfigurationError: java.rmi.server.ExportException: Port already in use: 1089; nested exception is:
        java.net.BindException: Address already in use (Bind failed)
        at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.exportMBeanServer(ConnectorBootstrap.java:820)
        at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:479)
        at jdk.management.agent/jdk.internal.agent.Agent.startAgent(Agent.java:447)
        at jdk.management.agent/jdk.internal.agent.Agent.startAgent(Agent.java:599)
Caused by: java.rmi.server.ExportException: Port already in use: 1089; nested exception is:
        java.net.BindException: Address already in use (Bind failed)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:335)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:243)
        at java.rmi/sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:412)
        at java.rmi/sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
        at java.rmi/sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:234)
        at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap$PermanentExporter.exportObject(ConnectorBootstrap.java:203)
        at java.management.rmi/javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:153)
        at java.management.rmi/javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:138)
        at java.management.rmi/javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:473)
        at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.exportMBeanServer(ConnectorBootstrap.java:816)
        ... 3 more
Caused by: java.net.BindException: Address already in use (Bind failed)
        at java.base/java.net.PlainSocketImpl.socketBind(Native Method)
        at java.base/java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:436)
        at java.base/java.net.ServerSocket.bind(ServerSocket.java:395)
        at java.base/java.net.ServerSocket.<init>(ServerSocket.java:257)
        at java.base/java.net.ServerSocket.<init>(ServerSocket.java:149)
        at java.rmi/sun.rmi.transport.tcp.TCPDirectSocketFactory.createServerSocket(TCPDirectSocketFactory.java:45)
        at java.rmi/sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:670)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:324)
        ... 12 more

当前docker-compose中ksqlDB服务器的JMX相关配置:

primary-ksqldb-server:
    image: ${KSQL_IMAGE_BASE}confluentinc/ksqldb-server:${KSQL_VERSION}
    hostname: primary-ksqldb-server
    container_name: primary-ksqldb-server
    depends_on:
      - kafka
      - schema-registry
    ports:
      - "8088:8088"
      - "1099:1099"
      - "1089:1089"
    logging:
      driver: local
      options:
        max-size: "10m"
        max-file: "3"
    environment:
      KSQL_CONFIG_DIR: "/etc/ksql"
      KSQL_LISTENERS: http://0.0.0.0:8088
      KSQL_BOOTSTRAP_SERVERS: kafka:9092
      KSQL_KSQL_ADVERTISED_LISTENER : http://localhost:8088
      KSQL_KSQL_SCHEMA_REGISTRY_URL: http://schema-registry:8081, http://secondary-schema-registry:8082
      KSQL_KSQL_LOGGING_PROCESSING_STREAM_AUTO_CREATE: "true"
      KSQL_KSQL_LOGGING_PROCESSING_TOPIC_AUTO_CREATE: "true"
      KSQL_KSQL_EXTENSION_DIR: "/usr/ksqldb/ext/"
      KSQL_KSQL_SERVICE_ID: "nrt_"
      KSQL_KSQL_STREAMS_NUM_STANDBY_REPLICAS: 1
      KSQL_KSQL_QUERY_PULL_ENABLE_STANDBY_READS: "true"
      KSQL_KSQL_HEARTBEAT_ENABLE: "true"
      KSQL_KSQL_LAG_REPORTING_ENABLE : "true"
      KSQL_KSQL_QUERY_PULL_MAX_ALLOWED_OFFSET_LAG : 100
      KSQL_LOG4J_APPENDER_KAFKA_APPENDER: "org.apache.kafka.log4jappender.KafkaLog4jAppender"
      KSQL_LOG4J_APPENDER_KAFKA_APPENDER_LAYOUT: "io.confluent.common.logging.log4j.StructuredJsonLayout"
      KSQL_LOG4J_APPENDER_KAFKA_APPENDER_BROKERLIST: localhost:9092
      KSQL_LOG4J_APPENDER_KAFKA_APPENDER_TOPIC: KSQL_LOG
      KSQL_LOG4J_LOGGER_IO_CONFLUENT_KSQL: INFO,kafka_appender
      KSQL_KSQL_QUERY_PULL_METRICS_ENABLED: "true"
      KSQL_JMX_OPTS: >
          -Djava.rmi.server.hostname=localhost
          -Dcom.sun.management.jmxremote
          -Dcom.sun.management.jmxremote.port=1099
          -Dcom.sun.management.jmxremote.authenticate=false
          -Dcom.sun.management.jmxremote.ssl=false
          -Dcom.sun.management.jmxremote.rmi.port=1089

禁用JMX配置时ksql-test-runner可正常运行,需在保留JMX指标的同时解决冲突。


解决方案

方案1:修改ksqlDB服务器的JMX端口

修改docker-compose中KSQL_JMX_OPTS里的端口,避免与ksql-test-runner默认使用的端口冲突:

KSQL_JMX_OPTS: >
    -Djava.rmi.server.hostname=localhost
    -Dcom.sun.management.jmxremote
    -Dcom.sun.management.jmxremote.port=1199  # 修改为未占用的端口
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.rmi.port=1189  # 修改为对应未占用的端口

同时更新ports映射:

ports:
  - "8088:8088"
  - "1199:1199"
  - "1189:1189"

修改后重启ksqlDB服务,再运行ksql-test-runner即可。

方案2:运行ksql-test-runner时指定自定义JMX端口

启动ksql-test-runner时通过环境变量覆盖JMX端口配置,避免与ksqlDB服务器冲突:

export JMX_OPTS="-Dcom.sun.management.jmxremote.port=1299 -Dcom.sun.management.jmxremote.rmi.port=1289"
ksql-test-runner -s /testing/ksql-statements-enhanced.ksql -i /testing/input.json -o /testing/output.json

这种方式不需要修改ksqlDB的配置,仅针对测试工具临时调整端口。

方案3:阻止ksql-test-runner启用JMX

如果测试过程不需要JMX指标,可以直接禁用ksql-test-runner的JMX功能:

export JMX_OPTS=""
ksql-test-runner -s /testing/ksql-statements-enhanced.ksql -i /testing/input.json -o /testing/output.json

内容的提问来源于stack exchange,提问作者vka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:55:22