繁体   English   中英

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

[英]How to produce messages from public computers to a Kafka installation on a private network?

我的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配置设置,但是没有一个起作用。 任何帮助将不胜感激。

您需要为内部和外部流量定义不同的端点,以使其正常工作。 按照目前的配置,当您连接到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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM