如何在 GCP 上运行的 Kafka 服务器中处理 GCP 外部的消息
Posted
技术标签:
【中文标题】如何在 GCP 上运行的 Kafka 服务器中处理 GCP 外部的消息【英文标题】:How to process messages outside GCP in a Kafka server running on GCP 【发布时间】:2020-10-09 00:13:41 【问题描述】:我一直试图在我的本地机器上运行一个消费者,连接到在 GCP 中运行的 Kafka 服务器。
Kafka 和 Zookeeper 在同一个 GCP 虚拟机实例上运行
第 1 步:启动 Zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties
第 2 步:启动 Kafka
bin/kafka-server-start.sh config/server.properties
如果我在 GCP VM 实例中运行消费者,它可以正常工作:
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
我验证了防火墙规则,并且我可以从本地计算机访问,我可以访问公共 IP 和运行 Kafka 服务器的端口。
我测试了很多选项,改变了kafka的server.properties,例如:
advertised.host.name=public-ip
或
advertised.listeners=public-ip
按照connecting-kafka-running-on-ec2-machine-from-my-local-machine 的回答没有成功。
【问题讨论】:
【参考方案1】:来自官方documentation:
advertised.listeners
监听器发布到 ZooKeeper 供客户端使用。在 IaaS 环境中,这可能 需要不同于代理绑定的接口。如果 未设置,将使用侦听器的值。不像 监听器发布 0.0.0.0 元地址是无效的。
在测试了许多不同的选项后,这个解决方案对我有用:
设置两个监听器,一个 EXTERNAL 使用公共 IP,一个 INTERNAL 使用私有 IP:
# Configure protocol map
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
# Use plaintext for inter-broker communication
inter.broker.listener.name=INTERNAL
# Specify that Kafka listeners should bind to all local interfaces
listeners=INTERNAL://0.0.0.0:9027,EXTERNAL://0.0.0.0:9037
# Separately, specify externally visible address
advertised.listeners=INTERNAL://localhost:9027,EXTERNAL://kafkabroker-n.mydomain.com:9093
解释:
在许多场景中,例如在 AWS 上部署时,外部 集群中 Kafka 代理的广告地址不同于 Kafka 使用的内部网络接口。
还记得设置您的防火墙规则以公开 EXTERNAL 侦听器上的端口以从外部计算机连接到它。
注意:仅限授权客户访问非常重要。 您可以使用网络防火墙规则来限制访问。本指南 适用于同时涉及 RFC 1918 和公共 IP 的场景; 但是,当使用公共 IP 地址时,更重要的是 保护您的 Kafka 端点,因为任何人都可以访问它。
取自google solutions。
【讨论】:
这个博客也解释了这个概念:confluent.io/blog/… 当您说 listeners=INTERNAL://0.0.0.0:9027,EXTERNAL://0.0.0.0:9037 时,我应该用我的内部 IP 替换单词 INTERNAL,用我的外部 IP 替换 External IP,例如听众 = 10.153.0.3://0.0.0.0:9027, 31.83.170.127://0.0.0.0:9037 ? 不,只是 INTERNAL 和 EXTERNAL 词之后的 IP 地址。 Advertisingd.listeners=INTERNAL://localhost:9027,EXTERNAL://kafkabroker-n.mydomain.com:9093 localhost:9027 -> 您可能会将其保留为 localhost,除非您使用某些 DNS 解析器,否则可能需要更改港口。 kafkabroker-n.mydomain.com:9093 -> 这很可能会随着您自己的外部 IP 或 DNS 而改变。以上是关于如何在 GCP 上运行的 Kafka 服务器中处理 GCP 外部的消息的主要内容,如果未能解决你的问题,请参考以下文章
如何在 nodejs 中调试或运行本地 GCP 无服务器应用程序?
启动脚本未在启用自动缩放的 GCP Compute Engine Windows 服务器上运行