我在谷歌计算引擎上运行我的 zookeeper 和 kafka 服务器。两者都在默认端口上运行(2181 上的 Zookeeper 和 9092 上的 kafka)。两者都在同一个实例上运行。我也打开了两个端口。在我的 server.properties 中我已经配置
zookeeper.connect=<InternalIP>:2181
host.name=localhost
如果我尝试从同一台服务器推送/使用消息,我可以这样做
推送/消费我使用
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 refueed in case of consumer
我尝试通过推送/消费
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
最佳答案
您必须通过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 地址更改时更改配置文件。
关于google-compute-engine - 无法从本地机器连接到谷歌计算引擎上的 kafka 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32811824/