我在谷歌计算引擎上运行我的zookeeper和kafka服务器 . 两者都在默认端口上运行(zookeeper on 2181,kafka on 9092) . 两者都在同一个实例上运行 . 我也打开了两个端口 . 在我配置的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
但是,如果从我的本地机器尝试相同,我在 生产环境 者和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
请注意,我能够从本地系统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
2 回答
您必须通过SSH访问 Cloud 计算VM实例,然后编辑kafka配置文件 .
取消注释#advertiseised.listeners = PLAINTEXT://:9092并替换为advertised.listeners = PLAINTEXT:// [instance_public_id_address]:9092
作为最后一步重启kafka服务
重要的是要考虑GCP计算VM的默认IP地址是短暂的,因此您必须在Kafka实例的GCP配置面板中将其更改为静态,以避免每次IP地址更改时更改配置文件 .
您是否配置了防火墙规则?你没有提到它,所以我假设没有 .
来自https://cloud.google.com/compute/docs/networks-and-firewalls#firewalls:
“默认情况下,来自网络外部的所有传入流量都被阻止,如果没有适当的防火墙规则,则不允许任何数据包进入实例 . ”