【发布时间】:2018-12-01 07:07:26
【问题描述】:
我有一个 kafka-node ("kafka-node": "^2.6.1",) 客户端,当我在 localhost 中运行节点应用程序并与 remote_address:2181 连接时,它成功生成消息。但是相同的代码在部署到测试服务器时会产生以下错误。
BrokerNotAvailableError: Broker not available
0|www | at new BrokerNotAvailableError (/var/www/backend/node_modules/kafka-node/lib/errors/BrokerNotAvailableError.js:11:9)
0|www | at Client.loadMetadataForTopics (/var/www/backend/node_modules/kafka-node/lib/client.js:371:15)
0|www | at Client.send (/var/www/backend/node_modules/kafka-node/lib/client.js:542:10)
0|www | at /var/www/backend/node_modules/kafka-node/lib/client.js:240:10
0|www | at /var/www/backend/node_modules/kafka-node/node_modules/async/dist/async.js:473:16
0|www | at iteratorCallback (/var/www/backend/node_modules/kafka-node/node_modules/async/dist/async.js:1064:13)
0|www | at /var/www/backend/node_modules/kafka-node/node_modules/async/dist/async.js:969:16
0|www | at buildRequest (/var/www/backend/node_modules/kafka-node/lib/client.js:256:24)
0|www | at /var/www/backend/node_modules/kafka-node/node_modules/async/dist/async.js:3110:16
0|www | at eachOfArrayLike (/var/www/backend/node_modules/kafka-node/node_modules/async/dist/async.js:1069:9)
0|www | at eachOf (/var/www/backend/node_modules/kafka-node/node_modules/async/dist/async.js:1117:5)
0|www | at Object.eachLimit (/var/www/backend/node_modules/kafka-node/node_modules/async/dist/async.js:3172:5)
0|www | at Client.sendProduceRequest (/var/www/backend/node_modules/kafka-node/lib/client.js:238:9)
0|www | at HighLevelProducer.BaseProducer.send (/var/www/backend/node_modules/kafka-node/lib/baseProducer.js:120:10)
0|www | at /var/www/backend/clients/3rdparty/kafka.js:104:16
可能的原因可能是 remoteServer 阻止了端口 2181 的传入请求,但我可以在 remote_address:2181 上远程登录。这是我的代码:
const clientConfig = {
connectionString: process.env.KAFKA_HOST,
clientId: process.env.KAFKA_CLIENTID || 'nodejs-kafka-client'
}
client = new kafka.Client(clientConfig.connectionString,
clientConfig.clientId)
producer = new kafka.HighLevelProducer(client, {})
bindListeners()
我在 kafka-node repo 上读到了 similar issue 问题。提出问题的人似乎使用一些 Zookeeper 配置来解决它。我使用 zookeeper 的默认配置。我不确定这是否是原因之一,因为我可以连接到我的本地主机。
【问题讨论】:
-
而不是使用
telnet调试连接,您应该使用 kafka bin 实用程序来测试您是否能够使用您在节点应用程序中使用的相同代理的主机和端口。 -
那些直接在 :9092 端口与 kafka 代理连接,kafka-node 通过 Zookeeper 在 :2181 连接。我相信动物园管理员出了点问题。
-
也许这是你的问题。我不经常使用 node.js,但对于最新版本的 kafka,建议直接使用 kafka 代理/集群主机和端口(对于消费者或生产者)。
-
此外,您的错误消息提到“代理不可用”而不是“动物园管理员”,因此请尝试使用代理端口。
-
如上所述。当客户端从本地 nodejs 服务器连接到远程 zookeeper 时,一切正常,但不是从远程节点服务器。
标签: node.js apache-kafka apache-zookeeper