我正在运行一台漫游主机Ubuntu 20.04在192.168.50.4:
config.vm.box = "bento/ubuntu-20.04"
...
config.vm.network "private_network", ip: "192.168.50.4"
没有太复杂的网络智慧,除了局域网默认值。
然后我按照这个步骤安装了Kafka(我知道有一个Vagrant Box,我只是想自己安装)。
现在的问题:
a) -如果我保持server.properties
的默认值:
#listeners=PLAINTEXT://:9092
...
#advertised.listeners=PLAINTEXT://your.host.name:9092
(评论)
客户机的生产者和消费者sh文件都可以正常工作。但是我在主机上的python脚本没有:
...
settings = {
'bootstrap.servers': '192.168.50.4:9092',
'group.id': 'mygroup',
'client.id': 'client-1',
'enable.auto.commit': True,
'session.timeout.ms': 6000,
'default.topic.config': {'auto.offset.reset': 'smallest'}
}
...
(此处为完整示例)
给出错误:
...
%3|1612854723.928|FAIL|client-1#consumer-1| [thrd:GroupCoordinator]: GroupCoordinator: vagrant.vm:9092: Failed to resolve 'vagrant.vm:9092': Name or service not known (after 29ms in state CONNECT)
...
我已经试过了:
listeners=PLAINTEXT://localhost:9092
...
advertised.listeners=PLAINTEXT://192.168.50.4:9092
这样的话,问题仍然是:
%3|1612855333.958|FAIL|client-1#consumer-1| [thrd:192.168.50.4:9092/bootstrap]: 192.168.50.4:9092/bootstrap: Connect to ipv4#192.168.50.4:9092 failed: Connection refused (after 0ms in state CONNECT, 1 identical error(s) suppressed)
b) -如果我只是改变server.properties
中的listeners
为:
...
listeners=PLAINTEXT://192.168.50.4:9092
...
python脚本可以在主机上运行,但是客户机的生产和消费sh文件不能:
[2021-02-09 07:20:36,958] WARN [Producer clientId=console-producer] Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)
不知道如何保持客户端和主机端的连接。这并不是因为缺乏搜索和分析。
Listeners是绑定地址。需要0.0.0.0:(端口)打开服务器到所有客户端。设置为localhost限制为该机器,设置为ip限制为该接口/路由
这里最简单的解决方案是发布localhost:(port),然后在Vagrant中设置端口转发,从发布的端口到侦听器配置中指定的端口(这些端口可以是不同的端口)
你的第一个错误是因为你的主机不知道虚拟机的主机名,除非你安装了一些Vagrant插件。
更合适的解决方案是发布虚拟机的主机专用IP地址