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

BKS*_*ngh 6 apache-kafka google-compute-engine apache-zookeeper

我正在Google计算引擎上运行我的zookeeper和kafka服务器。两者都在默认端口上运行(zookeeper在2181上,kafka在9092上)。两者都在同一实例上运行。我也打开了两个端口。在我的server.properties中,已经配置

zookeeper.connect=<InternalIP>:2181
host.name=localhost
Run Code Online (Sandbox Code Playgroud)

如果我尝试在同一服务器上推送/使用邮件,则可以这样做。

 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
 bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
Run Code Online (Sandbox Code Playgroud)

但是,如果尝试从本地计算机执行相同操作,则会在生产者和java.net.ConnectException中得到kafka.common.FailedToSendMessageException:如果使用了消费者,则重新建立连接,我会尝试通过

bin/kafka-console-producer.sh --broker-list <ExternalIP>:9092 --topic topic1
bin/kafka-console-consumer.sh --zookeeper <ExternalIP>:2181 --topic topic1 --from-beginning
Run Code Online (Sandbox Code Playgroud)

请注意,我能够从本地系统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
Run Code Online (Sandbox Code Playgroud)

描述

zookeeper port enabled
Network

default
Source filter

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

tcp:2181
Run Code Online (Sandbox Code Playgroud)

Gon*_*dez 6

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

$ sudo vim /opt/bitnami/kafka/config/server.properties
Run Code Online (Sandbox Code Playgroud)

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

最后,重新启动kafka服务

sudo /opt/bitnami/ctlscript.sh restart
Run Code Online (Sandbox Code Playgroud)

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