如何在 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 服务器上运行

如何使用 PySpark 并行化我的文件处理程序

如何在 App Engine (GCP) 上部署 Streamlit 应用程序?

如何在GCP发布/订阅中推送到多个端点?

在 GCP 上调整永久磁盘大小时,如何触发文件系统调整大小?