无法从本地计算机连接到 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 地址更改。
我是 运行 我的动物园管理员和 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/consumebin/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 地址更改。