gpt4 book ai didi

nginx - 允许通过nginx访问kafka

转载 作者:行者123 更新时间:2023-12-03 08:50:53 26 4
gpt4 key购买 nike

美好的一天,我想从互联网连接到我的 kafka 服务器。 Kafka 安装在虚拟服务器上,所有服务器都隐藏在 nginx 后面。

我更新了 kafka 设置 (server.properties)。添加:listeners=PLAINTEXT://:9092

我可以通过 IP 地址 10.0.0.1:9092 从本地网络连接到 kafka 服务器,但无法通过域名从互联网连接。

来自kafka的响应:java.util.concurrent.ExecutionException:org.apache.kafka.common.errors.TimeoutException:60000毫秒后元数据中不存在主题测试主题。

Nginx: [26/11/2019:12:38:25 +0100] "\x00\x00\x00\x14\x00\x12\x00\x02\x00\x00\x00\x00\x00 ” 400 166 “-” “-” “request_time=1.535” “upstream_response_time=-” “upstream_connect_time=-” “upstream_header_time=-”

nginx 配置:

server {
listen 9092;
server_name site.name;

# Max Request size
client_max_body_size 20m;

location / {
proxy_pass http://10.0.0.1:9092;
}
}

有人知道问题出在哪里吗?

最佳答案

Kafka 不使用 http 协议(protocol)进行通信,因此不能使用 HTTP 反向代理。

您必须使用 nginx 流定义 block 进行 TCP 代理

(我个人没有尝试过)

https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/

unable connect from internet by domain name.

听起来像是您的 advertized.listeners 配置存在问题。请注意,没有明确的方法可以将 Kafka“隐藏”在代理后面,因为您的客户端需要单独与每个代理直接通信(因此违背了拥有代理的目的)Ngnix 除非您想使用一台 Nginx 服务器或打开一个新端口(每个代理),因此还需要 Kafka 知道它需要“通告”代理而不是自己的地址。

如果你真的想将 Kafka 暴露给公共(public)网络,你应该使用 SSL/SASL 监听器,而不是 PLAINTEXT


如果你想使用HTTP,那么你可以安装Kafka REST Proxy,然后将Nginx放在它前面。那么你的客户将使用 http 而不是标准的 kafka 库

关于nginx - 允许通过nginx访问kafka,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59050175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com