我的 Kafka 节点托管在 Google Cloud Dataproc 中。但是,我们意识到通过默认初始化脚本安装的 Kafka 设置为只允许内网访问。它与外界完全隔绝。谷歌云网络外的生产者无法将消息发布到 Kafka,并且 Kafka 消息无法链接到其外网订阅者。
评论
我已将生产者 IP 列入白名单
通读其他 StackOverflow、博客文章和文档后。我认为这可能是由于in的advertised.listeners
部分原因。Socket Server Settings
/usr/lib/kafka/server.properties
第一个解决方案
我添加了
advertised.listeners=PLAINTEXT://[External_IP]:19092
然后
sudo /etc/init.d/kafka-server restart
结果
但是,当我尝试使用 Kafkacat 或 telnet 时,它总是失败。我还用各种端口测试了 Advertisementd.listeners
来自https://rmoff.net/2018/08/02/kafka-listeners-explained/的第二个解决方案
############################# Server Basics #############################
# The id of the broker. This must be set to a unique integer for each broker.
broker.id=0
############################# Socket Server Settings #############################
# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
# FORMAT:
# listeners = listener_name://host_name:port
# EXAMPLE:
# listeners = PLAINTEXT://your.host.name:9092
#
# Hostname and port the broker will advertise to producers and consumers. If not set,
# it uses the value for "listeners" if configured. Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().
->>>>>>> I added below listener config according to https://rmoff.net/2018/08/02/kafka-listeners-explained/
listeners=INTERNAL://0.0.0.0:9092,EXTERNAL://0.0.0.0:19092
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
advertised.listeners=EXTERNAL://[External_IP]:19092,INTERNAL://[Internal_IP]:9092
inter.broker.listener.name=INTERNAL
结果
结果和上面一样,不工作。
防火墙规则[更新]
谁能帮我解决这个问题?