运行我的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配置设置,但它们都没有工作。任何帮助将不胜感激。
答案 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