【问题标题】:Kafka Error connecting to node ubuntukafka:9092 (id: 0 rack: null) (org.apache.kafka.clients.NetworkClient) java.net.UnknownHostException:Kafka 错误连接到节点 ubuntukafka:9092 (id: 0 rack: null) (org.apache.kafka.clients.NetworkClient) java.net.UnknownHostException:
【发布时间】:2020-01-17 19:33:56
【问题描述】:

我在每个 ubuntu 的 VirtualBox 来宾上都有两台服务器。我可以从我的主机通过 SSH 连接到两者,以及两者之间,所以它们都有 natnetwork。

我在一台服务器 kafka 上运行,如下所述:

https://kafka.apache.org/quickstart

所以我提出了单节点 Zookeper 然后卡夫卡开始了。我添加了测试主题。 (全部在 MachineA 上。10.75.1.247)

我正在尝试从另一台机器上列出该节点上的主题:

bin/kafka-topics.sh --list --bootstrap-server 10.75.1.247:9092

来自 MachineB (10.75.1.2)

这样做会反复导致错误:

[2019-09-16 23:57:07,864] WARN [AdminClient clientId=adminclient-1] Error connecting to node ubuntukafka:9092 (id: 0 rack: null) (org.apache.kafka.clients.NetworkClient)
java.net.UnknownHostException: ubuntukafka
    at java.base/java.net.InetAddress$CachedAddresses.get(InetAddress.java:797)
    at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1505)
    at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1364)
    at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1298)
    at org.apache.kafka.clients.ClientUtils.resolve(ClientUtils.java:104)
    at org.apache.kafka.clients.ClusterConnectionStates$NodeConnectionState.currentAddress(ClusterConnectionStates.java:403)
    at org.apache.kafka.clients.ClusterConnectionStates$NodeConnectionState.access$200(ClusterConnectionStates.java:363)
    at org.apache.kafka.clients.ClusterConnectionStates.currentAddress(ClusterConnectionStates.java:151)
    at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:943)
    at org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:288)
    at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.sendEligibleCalls(KafkaAdminClient.java:925)
    at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.run(KafkaAdminClient.java:1140)
    at java.base/java.lang.Thread.run(Thread.java:834)

它确实解析了名称 (说 ubuntukafka 而不是 ubuntukafkanode)但失败了。

我错过了什么?我使用卡夫卡错了吗?我想我可以有一个不错的 kafka 服务器,我所有其他有数据的服务器也可以产生信息。那么许多其他消费者可以从中读取信息吗?

最终我想测试的是我是否可以向我的 kafka 服务器发送消息:

bin/kafka-console-producer.sh --broker-list 10.75.1.247:9092 --topic test

甚至稍后使用 python 生成消息到服务器。

from kafka import KafkaProducer

producer = KafkaProducer(bootstrap_servers='10.75.1.247:9092')
for _ in range(100):
    try:
        producer.send('test', b'some_message_bytes')
    except:
        print('doh')

【问题讨论】:

  • 请显示您的服务器属性文件

标签: java python-3.x apache-kafka virtualbox


【解决方案1】:

一般来说,您的主机名似乎无法解析。 ping ubuntukafka 有效吗?如果没有,那么您需要调整您让 Kafka 通过advertised.listeners 返回的内容,使其成为外部 IP 而不是主机名

listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://10.75.1.247:9092

其中,10.75.1.247 是外部机器要解析的网络地址(例如,确保您也可以 ping 该地址)

【讨论】:

  • 你是对的它不响应ubuntukafka,那只是机器名称。在任何一种情况下,它都会以某种方式获取它(它不在任何地方的主机文件中,除非 ubuntu 自动这样做),advertised.listeners 在 kafka/config 文件夹中的什么位置?上面例子中的 PLAINTEXT 是 10.75.1.247 还是机器 A 的 ip 地址?而adverted.listeners 在机器A 上?
  • PLAINTEXT 是一个协议。这两行已经作为server.properties 的一部分存在,它们只需要调整和取消注释。 stackoverflow.com/questions/42998859/…
  • 每个 Kafka 服务器都需要自己独特的广告侦听器供客户端连接。它可能是主机名,但您的 DNS 或主机文件似乎没有设置,所以只需使用 IP
  • 我使用他们的 .sh 文件进行测试,得到了很好的处理这些信息。仍然没有继续使用 python,但这是另一个可以确定的问题/主题。
【解决方案2】:

仅更改 listeners=PLAINTEXT://localhost:9092 对我有用,无需更改服务器配置中的 Advertisementd.listeners 属性

【讨论】:

  • 这个设置只能在本地机器上工作,虽然
猜你喜欢
  • 2020-06-15
  • 1970-01-01
  • 2021-06-23
  • 2018-02-16
  • 2020-05-04
  • 2016-08-01
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
相关资源
最近更新 更多