如何从外部通过专用网络访问Cloudera Kafka Broker?

时间:2018-11-12 12:46:56

标签: apache-kafka cloudera cloudera-cdh kafka-python

我在VPN内有一个群集,其中包含带有专用IP的服务器。我正在尝试在外部服务器到我的私有服务器之间建立Kafka通信。我的方法是设置一个IP表,其中公共IP指向我的私有IP。另外,我打开了端口9092和9093,以使其可从外部访问。现在,我可以使用外部服务器上的公共IP成功连接到服务器了。

telnet <public_ip> 9092
Connected to <public_ip>

我的kafka经纪人位于cloudera集群下,我使用Cloudera Manager创建了它。配置如下:

kafka.properties:

listeners=PLAINTEXT://<private_ip>:9092,SSL://<private_ip>:9093
advertised.listeners=PLAINTEXT://<private_ip>:9092,SSL://<private_ip>:9093

advertised.host.name:

<public_ip>

使用该代理配置,可以通过kafka代理主机的public_ip或private_ip在群集内完美地进行通信。

我现在看到的是,我有一个可以与public_ip一起使用的工作代理,以及一个能够访问public_ip及其必需端口的外部服务器。但是,当我尝试从外部服务器连接到代理时,出现以下错误:

NO BROKERS AVAILABLE

没有该错误的更多信息。在我的外部服务器上,我有kafka python软件包,在其中将生产者配置为:

"bootstrap_servers": ["<publi_ip>:9092"]

在我的kafka经纪人的现有主题上。

规格:

私人主机

  

cloudera:CDH 5.12.0

     

kafka:kafka 2.2.0-1.2.2.0

     

zookeeper:Zookeeper 3.4.5

外部主机

  

kafka Python软件包:kafka-python == 1.4.2

问题与this post非常相似。但是在这种情况下,他使用带有公共IP的转发端口。有可能用ip表吗?任何人都可以在cloudera集群上做到这一点?

谢谢。

1 个答案:

答案 0 :(得分:2)

该问题并非特定于Cloudera或Python。而且我认为Cloudera Manager不会为您设置任何设置。

advertised.listeners必须是一个公共可解析的地址,客户端可以使用该地址单独访问每个代理(例如,两个代理不能具有相同的侦听器设置,并且可以从从公共地址转发到代理的端口使用)内部地址)

您的设置与在Docker或AWS等云提供商中运行的Kafka非常相似,因为您要通过两个网络进行交互,因此请参阅this blog for more information

此外,除非您设置其他防火墙设置以防止随机访问,否则不要在纯文本协议中公开代理