Kafka监听器无法正常工作!它在Intranet中是隔离的

问题描述 投票:2回答:1

我的Kafka节点托管在Google Cloud Dataproc中。但是,我们意识到通过默认初始化脚本安装的Kafka的设置方式仅允许内部网访问。它与外界完全隔离。谷歌云网络外部的生产者无法将消息发布到Kafka,Kafka消息也不能链接到其Extranet订户。

备注

我已将生产者IP列入白名单

通过其他StackOverflow,博客文章和文档阅读后。我认为可能是由于advertised.listenersSocket Server Settings/usr/lib/kafka/server.properties部分。

第一个解决方案

我添加了advertised.listeners=PLAINTEXT://[External_IP]:19092

然后sudo /etc/init.d/kafka-server restart

Kafka Restart Successfully

结果

但是,当我尝试使用Kafkacat或telnet时,它总是失败。我还用各种端口测试了advertised.listenersPing Success, telnet and kafkacat failed

第二解决方案来自https://rmoff.net/2018/08/02/kafka-listeners-explained/enter image description here

############################# 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

结果

与上面的结果相同,不起作用。

防火墙规则

这是我当前的防火墙规则配置。我做错了吗?Firewall Rules

有人可以帮我解决这个问题吗?

apache-kafka google-cloud-dataproc google-cloud-networking
1个回答
0
投票

这是适用于我的集群的内容:

我从第二个解决方案中设置了以下属性:

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

我创建了一个防火墙规则,将端口19092打开到我的个人开发计算机IP,并将其应用于网络。 从我的机器上,我尝试通过telnet接入kafka服务器,并且得到了:

$ telnet [EXTERNAL-IP] 19092
Trying [EXTERNAL-IP]...
Connected to [EXTERNAL-IP].
Escape character is '^]'.

然后我尝试使用kafkacat,但出现错误。在调试中运行,我看到错误是因为我没有设置任何主题:

%7|1578351264.551|METADATA|rdkafka#producer-1| [thrd:main]: [EXTERNAL-IP]:19092/bootstrap: ===== Received metadata: application requested =====
%7|1578351264.551|METADATA|rdkafka#producer-1| [thrd:main]: [EXTERNAL-IP]:19092/bootstrap: ClusterId: jYxfi6zzR0euAovYyKCFZg, ControllerId: -1
%7|1578351264.551|METADATA|rdkafka#producer-1| [thrd:main]: [EXTERNAL-IP]:19092/bootstrap: 0 brokers, 0 topics
%7|1578351264.551|METADATA|rdkafka#producer-1| [thrd:main]: [EXTERNAL-IP]:19092/bootstrap: No brokers or topics in metadata: should retry
%7|1578351264.551|REQERR|rdkafka#producer-1| [thrd:main]: [EXTERNAL-IP]:19092/bootstrap: MetadataRequest failed: Local: Partial response: explicit actions Retry
%7|1578351264.551|RETRY|rdkafka#producer-1| [thrd:[EXTERNAL-IP]:19092/bootstrap]: [EXTERNAL-IP]:19092/bootstrap: Retrying MetadataRequest (v2, 25 bytes, retry 1/2, prev CorrId 3) in 100ms

[请注意,我尝试从外部连接到集群的kafka服务器。在问题中,telnet和kafkacat与kafka服务器(kafka-tng-w-0)在同一台计算机上运行。

© www.soinside.com 2019 - 2024. All rights reserved.