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

gywdnpxw  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(213)

我的kafka服务器运行的系统有两个NIC,一个具有公共ip(135.220.23.45),另一个具有私有ip(192.168.1.14)。专用nic连接到一个子网,该子网总共由7台机器组成(所有机器的地址均为192.168.1.)。kafka已作为一项服务使用hdp安装,并配置了zookeeper.connect=192.168.1.14:2181和侦听器=plaintext://192.168.1.14:6667. 我在托管kafka服务器的系统上启动了一个使用者,使用:[bin/kafka-console-consumer.sh--bootstrap server 192.168.1.14:6667--topic test--from beging]。
当我在私有子网上的任何机器上启动producer(使用[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]在外部系统上启动生产者时,消费者无法接收消息。
我尝试了不同的kafka配置设置,用于侦听器和adverted.listeners,但没有一个有效。任何帮助都将不胜感激。

mi7gmzs6

mi7gmzs61#

您需要为内部和外部通信量定义不同的端点,这样才能工作。按照当前的配置,当您连接到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

相关问题