kafka节点无法在本地环境中连接到kafka服务器

用户名

我使用docker inspect命令启动了一个kafka(版本2.2.0)docker容器。

卡夫卡配置是

Using ZOOKEEPER_CONNECT=172.17.0.2:2181
Using KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.17.0.6:9092
Using KAFKA_BROKER=172.17.0.4:9092

显示网络设置

 "NetworkSettings": {
            "Ports": {
                "8778/tcp": null,
                "9092/tcp": null,
                "9779/tcp": null
            },
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.6",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:06"

另外,我在kafka容器中查找了主题。

./zkCli.sh
ls /brokers/topics

主题如下所示

[connect-status, dbserver1.public.dumb_table, my-connect-offsets, __consumer_offsets, my-connect-configs]

最后,我启动了一个节点应用程序以连接到kafka,但是失败了。https://github.com/SOHU-Co/kafka-node#kafkaclient

const kafka = require('kafka-node');
const bp = require('body-parser');

try {
  const Consumer = kafka.HighLevelConsumer;
  const client = new kafka.KafkaClient({kafkaHost: '172.17.0.6:9092'});
  let consumer = new kafka.Consumer(
    client,
    [{ topic: "dbserver1.public.dumb_table", partition: 0 }],
    {
      autoCommit: true,
      fetchMaxWaitMs: 1000,
      fetchMaxBytes: 1024 * 1024,
      encoding: 'utf8',
      fromOffset: false
    }
  );
  consumer.on('ready', function () {
        console.log('consumer ready');

  });
  consumer.on('message', async function(message) {
    console.log('here');
    console.log(
      'kafka-> ',
      message.value
    );
  })
  consumer.on('error', function(err) {
    console.log('error', err);
  });
}
catch(e) {
  console.log(e);
}

如果kafkaHost配置为'172.17.0.6:9092',则会抛出错误

{ Error: connect ENETUNREACH 172.17.0.6:9092
    at Object._errnoException (util.js:992:11)
    at _exceptionWithHostPort (util.js:1014:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1186:14)
  code: 'ENETUNREACH',
  errno: 'ENETUNREACH',
  syscall: 'connect',
  address: '172.17.0.6',
  port: 9092 }

如果kafkaHost配置为'localhost:9092',则会抛出错误

{ TimeoutError: Request timed out after 30000ms
at new TimeoutError (/Users/xisizhe/Documents/projects/game/server/node_modules/kafka-node/lib/errors/TimeoutError.js:6:9)
at Timeout.setTimeout [as _onTimeout] (/Users/xisizhe/Documents/projects/game/server/node_modules/kafka-node/lib/kafkaClient.js:491:14)
at ontimeout (timers.js:498:11)
at tryOnTimeout (timers.js:323:5)
at Timer.listOnTimeout (timers.js:290:5) message: 'Request timed out after 30000ms' }
板球运动员

如果kafkaHost配置为'172.17.0.6:9092',则会抛出错误

您的Node应用程序也在Docker中运行吗?如果是这样,您将不会看到该错误。


看起来您确实做到了docker inspect,然后从中复制了一些IP,我没有看到我遇到的任何Debezium / Docker + Kafka教程中都需要这些IP。

您需要主机IP(您的Mac);在Docker和VM网络外部进行托管(您的主机无法将请求路由到该子网)。


例如,在Mac上,我检查了一个随机容器(恰好是Kafka)

docker inspect ee708cf11010 | grep IPAddress
        "SecondaryIPAddresses": null,
        "IPAddress": "",
                "IPAddress": "172.18.0.3",
                "IPAddress": "172.20.0.3",

我无法连接到那些

nc -vz 172.20.0.3 9092
# ... hangs

但是我可以连接到裸露的端口

nc -vz localhost 9092
found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
    outif lo0
    src ::1 port 51180
    dst ::1 port 9092
    rank info not available
    TCP aux info available

Connection to localhost port 9092 [tcp/XmlIpcRegSvc] succeeded!

要么

  • 使用我的主机名 nc -vz $(hostname -f) 9092
  • 我的局域网IP nc -vz 192.168.1.105 9092

Debezium教程所述ADVERTISED_HOST_NAME必须是您主机的主机名或外部IP。主机名最简单,您可以像这样将其传递给docker。

docker run -it --name kafka -p 9092:9092 -e ADVERTISED_HOST_NAME=$(hostname -f) --link zookeeper:zookeeper debezium/kafka

您的Node代码仍然可以使用localhost:9092,但是无论如何要传递正确的IP /主机名会更合乎逻辑。


此外:由于Debezium / kafka只是启动Kafka,因此不需要使用Debezium / kafka容器来使用实际的Debezium连接器。因此,这是我的其他答案,说明如何在Docker中为在Docker中以及从主机运行的生产者/消费者应用程序正确配置Kafka

从本地计算机连接到在Docker中运行的Kafka

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Kafka节点连接到kafka的localhost实例,但不连接到远程kafka服务器

无法从本地计算机连接到Google计算引擎上的kafka服务器

无法连接到Kafka服务器的TCP套接字

无法连接到 VPN 中的本地服务器

Python Kafka 客户端无法连接到远程 Kafka 服务器

无法使用Google帐户在节点JS本地服务器中连接SMTP服务器

无法使用SCRAM身份验证将客户端连接到kafka服务器

连接到现有的Kafka代理时,ksqlDB服务器无法启动

无法从远程客户端连接到数字海洋上的 kafka 服务器

节点连接到本地主机中的Xmpp服务器

Mongodb无法连接到本地服务器

无法连接到Flask本地服务器

无法使用Xcode连接到本地服务器

无法连接到本地Mumble服务器

无法连接到本地MySQL服务器

无法连接到本地网络中的kafka容器

如何从外部服务器连接到 kafka 服务器?

docker-compose中的“无法连接到本地MySQL服务器”

运行Rails时无法通过ubuntu中的套接字连接到本地MySQL服务器

无法连接到在本地Docker容器中运行的Go GRPC服务器

Spark无法读取kafka主题,并显示错误“超时6000之内无法连接到zookeeper服务器”

无法使用服务器名/实例名连接到本地服务器

无法连接到本地 pyftpdlib FTP 服务器:[WinError 10061] 无法建立连接

在Kubernetes中,Kafka Connect部署无法连接到Kafka Broker服务(内部图)

无法连接到Docker中的Postgres服务器

无法在 Nautilus 中“连接到服务器”

我无法连接到docker中的Rabbitmq服务器

无法连接到Docker中的MySQL服务器

ssh无法连接到PHP中的git服务器