如何从公共计算机生成消息到专用网络上的Kafka安装?

时间:2017-10-25 10:32:18

标签: apache-kafka hortonworks-data-platform

运行我的Kafka服务器的系统有两个NIC,一个带有公共IP(135.220.23.45),另一个带有私有IP(192.168.1.14)。专用NIC连接到由7台计算机组成的子网(全部具有地址192.168.1.xxx)。 Kafka已作为使用HDP的服务安装,并已配置zookeeper.connect = 192.168.1.14:2181和listeners = PLAINTEXT://192.168.1.14:6667。我使用以下方法在托管kafka服务器的系统上启动了一个使用者:[bin / kafka-console-consumer.sh --bootstrap-server 192.168.1.14:6667 --topic test --from-beginning]。

当我在私有子网上的任何机器上启动生产者(使用[bin / kafka-console-producer.sh --broker-list 192.168.1.14:6667-topic test])时,通常由消费者。

我想在公共系统上启动生产者,并在kafka服务器上运行的消费者接收消息。我相信这可以通过IP伪装和将所有外部请求转发到135.220.23.45:15501(我选择15501来接收kafka消息)到192.168.1.14:6667来实现。为此,我在firewalld上设置了这个端口转发规则:[port = 15501:proto = tcp:toport = 6670:toaddr = 192.168.1.14]。

然而,这似乎不起作用,因为当我使用[bin / kafka-console-producer.sh --broker-list 135.220.23.45:15501 --topic]在外部系统上启动生产者时,消息不能被消费者接受。

我已经为侦听器和advertised.listeners尝试了不同的kafka配置设置,但它们都没有工作。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您需要为内部和外部流量定义不同的端点才能使其正常工作。正如当前配置的那样,当您连接到135.220.23.45:15501时,Kafka将回复"请在192.168.1.14:6667与我联系,这是从外部无法访问的,并且从那里开始的所有内容都失败。

使用KIP-103 Kafka通过允许您定义多个端点来扩展以满足这些方案。 完全披露,我还没有尝试过这个,但是以下几行中的内容至少应该让你开始走正确的道路。

advertised.listeners=EXTERNAL://135.220.23.45:15501,INTERNAL://192.168.1.14:6667
inter.broker.listener.name=INTERNAL
listener.security.protocol.map=EXTERNAL:PLAINTEXT,INTERNAL:PLAINTEXT

<强>更新

我已经对三台ec2机器的集群进行了测试。我使用了以下配置:

# internal ip: 172.31.61.130
# external ip: 184.72.211.109

listeners=INTERNAL://:9092,EXTERNAL_PLAINTEXT://:9094
advertised.listeners=INTERNAL://172.31.61.130:9092,EXTERNAL_PLAINTEXT://184.72.211.109:9094
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL_PLAINTEXT:PLAINTEXT
inter.broker.listener.name=INTERNAL

这使我能够从内部机器以及家中的笔记本电脑发送消息:

# Create topic 
kafka-topics --create --topic testtopic --partitions 9 --replication-factor 3 --zookeeper 127.0.0.1:2181

# Produce messages from internal machine
[ec2-user@ip-172-31-61-130 ~]$ kafka-console-producer --broker-list 127.0.0.1:9092 --topic testtopic                                                                                                               
>internal1
>internal2
>internal3

# Produce messages from external machine
➜  bin ./kafka-console-producer --topic testtopic --broker-list 184.72.211.109:9094
external1
external2
external3

# Check topic
[ec2-user@ip-172-31-61-130 ~]$ kafka-console-consumer --bootstrap-server 172.31.52.144:9092 --topic testtopic --from-beginning
external3
internal2
external1
external2
internal3
internal1