如何在gcp上运行的kafka服务器中处理gcp之外的消息

dphi5xsq  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(484)

我一直试图在我的本地计算机上运行一个连接到gcp内部运行的kafka服务器的消费者。
kafka和zookeeper在同一gcp vm示例上运行
第一步:启动zookeeper

bin/zookeeper-server-start.sh config/zookeeper.properties

第二步:开始Kafka

bin/kafka-server-start.sh config/server.properties

如果在gcp vm示例中运行consumer,它可以正常工作:

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的答案,但没有成功。

flmtquvp

flmtquvp1#

根据官方文件:
播发的.listeners
侦听器发布到zookeeper以供客户端使用。在iaas环境中,这可能需要与代理绑定到的接口不同。如果未设置,则将使用侦听器的值。与侦听器不同,播发0.0.0.0元地址是无效的。
在测试了许多不同的选项之后,这个解决方案对我很有效:
设置两个侦听器,一个外部侦听器使用公共ip,一个内部侦听器使用私有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使用的内部网络接口不同。
另外,请记住设置防火墙规则,以在“其他”中公开外部侦听器上的端口,以便从外部计算机连接到该端口。
注意:重要的是要限制对授权客户的访问。您可以使用网络防火墙规则来限制访问。本指南适用于涉及RFC1918和公共ip的场景;但是,在使用公共ip地址时,保护kafka端点的安全更为重要,因为任何人都可以访问它。
摘自谷歌解决方案。

相关问题