在尝试获取kafka中所有主题的列表时获取绑定异常

时间:2018-01-19 05:18:56

标签: apache-kafka

我使用以下命令获取kafka中所有主题的列表

./bin/kafka-topics.sh --list --zookeeper localhost:2181

但是我收到以下错误

Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 9999; nested exception is:
    java.net.BindException: Address already in use (Bind failed)

我的kafka版本为0.10.1.0

2 个答案:

答案 0 :(得分:1)

对不起,我来得太晚了,但是今天我遇到了这个问题,这篇文章帮助我找到了可行的解决方案,所以我认为我应该发布解决方法。我已经分别在Cloudera(néeHortworks)HDP v3.1和2.6.5下用Kafka v2.0和1.0对此进行了测试。

如先前答案中所建议,需要更新kafka-run-class.sh。您表明您正在运行./bin/kafka-topics.sh;运行类脚本应与同一目录中的主题脚本一起显示。在我的Hadoop代理上,路径为/ usr / hdp / current / kafka-broker / bin /

找到脚本的这一部分:

# JMX port to use
if [ $ISKAFKASERVER = "true" ]; then
    JMX_REMOTE_PORT=$JMX_PORT
else
    JMX_REMOTE_PORT=$CLIENT_JMX_PORT
fi

并将其更改为:

# JMX port to use
if [ $ISKAFKASERVER = "true" ]; then
    JMX_REMOTE_PORT=$JMX_PORT
else
    JMX_REMOTE_PORT=$CLIENT_JMX_PORT
    unset KAFKA_OPTS
fi

当然,这是假定JMX端口是通过$ KAFKA_OPTS设置为上游的,并且您不需要任何特殊设置。

我还没有测试过,但是从理论上讲,取消设置JMX_PORT也可以,并且您始终可以使用诸如KAFKA_OPTS =“ my special options”之类的值来覆盖KAFKA_OPTS值。

答案 1 :(得分:0)

端口9999听起来像是JMX端口。您是否在代理端启用了JMX端口(设置JMX_PORT和KAFKA_JMX_OPTS env vars)?如果是,您是否明智地设置了这些env vars系统? 与所有其他工具一样,kafka-topics.sh命令在内部使用kafka-run-class.sh,它启动Java类(在您的情况下为TopicCommand)。如果在启动该工具的控制台中设置了上述env变量,它会尝试在那里启用JMX,并与代理中启用的JMX端口冲突。你能确认是否设置了上述变量吗?