我有一个centos7.5vm正在运行,我正在尝试将zookeeper/kafka服务器运行到一个容器中(使用docker compose)。
我正在使用kafka节点(2.6.1)来使用kafka。当直接在虚拟机上运行时,一切正常。但是当kafak服务器被停靠时,有一个与ipv6相关的问题。
当我使用 /bin/kafka-topics.sh
在容器外部(在主机上)时编写脚本,表示容器正常,端口(21819092)已打开。
以下是我使用的版本:
//CentOS Version
SB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.5.1804 (Core)
Release: 7.5.1804
Codename: Core
//nodejs verison
5.3.0
//kafka version
2.11-2.0.0
// docker version
Client:
Version: 18.06.0-ce
API version: 1.38
Go version: go1.10.3
Git commit: 0ffa825
Built: Wed Jul 18 19:08:18 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.0-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: 0ffa825
Built: Wed Jul 18 19:10:42 2018
OS/Arch: linux/amd64
Experimental: false
//docker compose version
docker-compose version 1.21.2, build a133471
docker-py version: 3.4.1
CPython version: 2.7.5
OpenSSL version: OpenSSL 1.0.2k-fips 26 Jan 2017
以下是我的nodejs脚本,当kafka在主机上时可以正常工作,但当kafka在docker中时则不行:
var fs = require('fs'),
kafka = require('kafka-node'),
path = require('path'),
cassandra = require('cassandra-driver'),
moment = require('moment');
//Producer
const client = new kafka.Client("127.0.0.1:2181");
const producer = new kafka.HighLevelProducer(client);
var interval;
console.log('Hello');
producer.on("ready", function () {
console.log("Ingestion Complete Event Producer is connected and ready.");
interval = setInterval(function () {
_scanDirectoryAndTagReport();
}, (process.argv[2] || 1500));
});
producer.on('error', function(err) {
console.log('error', err);
});
下面是我从vm运行这个脚本时得到的输出:
Hello
Ingestion Complete Event Producer is connected and ready.
error { Error: getaddrinfo ENOTFOUND d98e973bc4a7 d98e973bc4a7:9092
at errnoException (dns.js:28:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:79:26)
code: 'ENOTFOUND',
errno: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'd98e973bc4a7',
host: 'd98e973bc4a7',
port: '9092' }
error { Error: getaddrinfo ENOTFOUND d98e973bc4a7 d98e973bc4a7:9092
at errnoException (dns.js:28:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:79:26)
code: 'ENOTFOUND',
errno: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'd98e973bc4a7',
host: 'd98e973bc4a7',
port: '9092' }
error { Error: getaddrinfo ENOTFOUND d98e973bc4a7 d98e973bc4a7:9092
at errnoException (dns.js:28:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:79:26)
code: 'ENOTFOUND',
errno: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'd98e973bc4a7',
host: 'd98e973bc4a7',
port: '9092' }
error { Error: getaddrinfo ENOTFOUND d98e973bc4a7 d98e973bc4a7:9092
at errnoException (dns.js:28:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:79:26)
code: 'ENOTFOUND',
errno: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'd98e973bc4a7',
host: 'd98e973bc4a7',
port: '9092' }
error { Error: getaddrinfo ENOTFOUND d98e973bc4a7 d98e973bc4a7:9092
at errnoException (dns.js:28:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:79:26)
code: 'ENOTFOUND',
errno: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'd98e973bc4a7',
host: 'd98e973bc4a7',
port: '9092' }
error { Error: getaddrinfo ENOTFOUND d98e973bc4a7 d98e973bc4a7:9092
at errnoException (dns.js:28:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:79:26)
code: 'ENOTFOUND',
errno: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'd98e973bc4a7',
host: 'd98e973bc4a7',
port: '9092' }
错误消息正在循环。
有人有线索吗?
祝您有个美好的一天,
奈托弗
编辑1:正如在评论中指出的,这不是一个与ipv6相关的问题,但问题是我的生产者解决的主机是容器id
1条答案
按热度按时间bpzcxfmw1#
我找到了一个解决方案,您可以在docker-compose.yml中指定一个主机名,并将nodejs客户机设置为连接到该主机名。
以下是.yml:
如您所见,我添加了hostname:kafakazoo,这是新的kafka客户端:
这个很好用
多亏了迈克尔·汉普顿