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

Not able to connect to kafka server on google compute engine from local machine

我是 运行 我的动物园管理员和 google 计算引擎上的 kafka 服务器。两者在默认端口上都是 运行(2181 上的 zookeeper 和 9092 上的 kafka)。两者都是 运行 在同一个实例上。我也打开了这两个端口。在我的 server.properties 中,我配置了

zookeeper.connect=<InternalIP>:2181
host.name=localhost

如果我尝试 push/consume 来自同一服务器的消息,我可以这样做 push/consume 我用

 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
 bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

但是,如果尝试从我的本地计算机进行相同操作,我会在生产者中得到 kafka.common.FailedToSendMessageException 并且在消费者中得到 java.net.ConnectException: connection refuesed 我尝试通过

push/consume
bin/kafka-console-producer.sh --broker-list <ExternalIP>:9092 --topic topic1
bin/kafka-console-consumer.sh --zookeeper <ExternalIP>:2181 --topic topic1 --from-beginning

请注意,我可以从我的本地系统 ping 外部 IP。

我已经在计算引擎中配置了下面提到的防火墙规则

Description

kafka port enabled
Network

default
Source filter

Allow from any source (0.0.0.0/0)
Allowed protocols and ports

tcp:9092

描述

zookeeper port enabled
Network

default
Source filter

Allow from any source (0.0.0.0/0)
Allowed protocols and ports

tcp:2181

您是否配置了任何防火墙规则?你没提,我猜不会。

来自 https://cloud.google.com/compute/docs/networks-and-firewalls#firewalls :

"By default, all incoming traffic from outside a network is blocked and no packet is allowed into an instance without an appropriate firewall rule."

您必须通过SSH访问云计算VM实例,然后编辑kafka配置文件。

$ sudo vim /opt/bitnami/kafka/config/server.properties

取消注释行 # advertised.listeners=PLAINTEXT://:9092 并替换为 advertised.listeners=PLAINTEXT://[instance_public_id_address]:9092

最后一步重启kafka服务

sudo /opt/bitnami/ctlscript.sh restart

重要的是要考虑 GCP 计算 VM 的默认 IP 地址是临时的,因此您必须在 Kafka 实例的 GCP 配置面板中将其更改为静态,以避免每次更改配置文件IP 地址更改。