从我的 LAN 外部访问 Kafka 代理
Accessing Kafka broker from outside my LAN
我使用下面的默认命令启动了一个普通的 Zookeeper/Kafka 代理,因为这些在一台机器的 Kafka documentation 中有所描述(我们称它为 机器 A)
bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties
这些在机器 A 的 localhost:9092 处启动代理。
然后我转到同一网络上的另一台计算机(我们将其命名为 机器 B),并通过调用此
创建 Kafka 提供的默认消费者
bin/kafka-console-consumer.sh --bootstrap-server IP_ADDRESS_HERE:9092 --topic test --from-beginning
其中 IP_ADDRESS_HERE 是托管代理的机器 A 的本地网络中的 IP 地址(例如,192.168.1.10)
一切正常。然后我尝试从本地网络之外的一台机器访问代理(我们称之为 Machine C)。我转到我的路由器配置,并为托管代理的机器(机器 A)执行端口转发。例如,我执行以下操作
192.168.1.10:9092 --> 9094
意思是我将192.168.1.10设备(机器A)的内部9092端口转发到我路由器的9094端口。然后我转到 YouGetSignal 之类的服务并检查我的 public IP 地址(例如 97.190.92.128)的端口 9094 是否打开。我收到一条消息,确实端口已打开。
当我尝试使用以下命令从机器 C 中使用机器 A 中的 borker 时
bin/kafka-console-consumer.sh --bootstrap-server PUBLIC_IP_ADDRESS_HERE:9094 --topic test --from-beginning
其中 PUBLIC_IP_ADDRESS_HERE 是机器 A 所在网络的 public IP 地址(例如,97.190.92.128)。但是,我收到无法连接到 192.168.1.10:9092 的错误 - 代理可能不可用(请注意错误中返回了内部 IP:port,这意味着我的路由器正确提供了信息)
我做错了什么?
您需要更新您的 server.properties
中的 advertised.listeners
以提供您的 客户端 可以解析和连接的 host/IP 和端口组合.
如您所见,代理发出 192.168.1.10:9092
以响应连接到它的客户端,这对同一网络上的任何机器(包括机器 B)都可以正常工作。
对于机器 C,代理需要告诉它如何连接到代理,如果我没听错的话就是 PUBLIC_IP_ADDRESS_HERE:9094
。
如果您需要从 LAN 和 WAN 进行连接,则需要两个侦听器;一个用于 LAN,一个用于 WAN。在 server.properties
中输入:
listeners=LISTENER_LAN://0.0.0.0:9092,LISTENER_WAN://0.0.0.0:9094
advertised.listeners=LISTENER_LAN://192.168.1.10:9092,LISTENER_WAN://PUBLIC_IP_ADDRESS_HERE:9094
listener.security.protocol.map: LISTENER_LAN:PLAINTEXT,LISTENER_WAN:PLAINTEXT
inter.broker.listener.name=LISTENER_LAN
请注意,您需要更改端口转发,以便代理上的端点是为 LISTENER_WAN
(9094) 定义的端口。如果 WAN 连接尝试连接到 9092 上的代理,那么它将获得 LISTEN_LAN
详细信息(这是目前正在发生的事情,并且不会起作用)。
我使用下面的默认命令启动了一个普通的 Zookeeper/Kafka 代理,因为这些在一台机器的 Kafka documentation 中有所描述(我们称它为 机器 A)
bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties
这些在机器 A 的 localhost:9092 处启动代理。
然后我转到同一网络上的另一台计算机(我们将其命名为 机器 B),并通过调用此
创建 Kafka 提供的默认消费者bin/kafka-console-consumer.sh --bootstrap-server IP_ADDRESS_HERE:9092 --topic test --from-beginning
其中 IP_ADDRESS_HERE 是托管代理的机器 A 的本地网络中的 IP 地址(例如,192.168.1.10)
一切正常。然后我尝试从本地网络之外的一台机器访问代理(我们称之为 Machine C)。我转到我的路由器配置,并为托管代理的机器(机器 A)执行端口转发。例如,我执行以下操作
192.168.1.10:9092 --> 9094
意思是我将192.168.1.10设备(机器A)的内部9092端口转发到我路由器的9094端口。然后我转到 YouGetSignal 之类的服务并检查我的 public IP 地址(例如 97.190.92.128)的端口 9094 是否打开。我收到一条消息,确实端口已打开。
当我尝试使用以下命令从机器 C 中使用机器 A 中的 borker 时
bin/kafka-console-consumer.sh --bootstrap-server PUBLIC_IP_ADDRESS_HERE:9094 --topic test --from-beginning
其中 PUBLIC_IP_ADDRESS_HERE 是机器 A 所在网络的 public IP 地址(例如,97.190.92.128)。但是,我收到无法连接到 192.168.1.10:9092 的错误 - 代理可能不可用(请注意错误中返回了内部 IP:port,这意味着我的路由器正确提供了信息)
我做错了什么?
您需要更新您的 server.properties
中的 advertised.listeners
以提供您的 客户端 可以解析和连接的 host/IP 和端口组合.
如您所见,代理发出 192.168.1.10:9092
以响应连接到它的客户端,这对同一网络上的任何机器(包括机器 B)都可以正常工作。
对于机器 C,代理需要告诉它如何连接到代理,如果我没听错的话就是 PUBLIC_IP_ADDRESS_HERE:9094
。
如果您需要从 LAN 和 WAN 进行连接,则需要两个侦听器;一个用于 LAN,一个用于 WAN。在 server.properties
中输入:
listeners=LISTENER_LAN://0.0.0.0:9092,LISTENER_WAN://0.0.0.0:9094
advertised.listeners=LISTENER_LAN://192.168.1.10:9092,LISTENER_WAN://PUBLIC_IP_ADDRESS_HERE:9094
listener.security.protocol.map: LISTENER_LAN:PLAINTEXT,LISTENER_WAN:PLAINTEXT
inter.broker.listener.name=LISTENER_LAN
请注意,您需要更改端口转发,以便代理上的端点是为 LISTENER_WAN
(9094) 定义的端口。如果 WAN 连接尝试连接到 9092 上的代理,那么它将获得 LISTEN_LAN
详细信息(这是目前正在发生的事情,并且不会起作用)。