【问题标题】:Allow access to kafka via nginx允许通过 nginx 访问 kafka
【发布时间】:2022-03-08 22:14:13
【问题描述】:

美好的一天, 我想从互联网连接到我的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: Topic test-topic not present in metadata after 60000 ms.

Nginx:[26/Nov/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 端口,没有 nginx

标签: nginx apache-kafka


【解决方案1】:

Kafka 不使用 http 协议进行通信,因此它不能以 HTTP 反向代理为前端。

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

(我没有亲自尝试过)

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

无法通过域名从互联网连接。

听起来您的advertised.listeners 配置有问题。请注意,没有明确的方法可以将 Kafka “隐藏”在代理后面,因为您的客户端需要单独与每个代理直接通信(因此违背了拥有 Ngnix 除非您想为每个代理运行一台服务器)

如果您真的想将 Kafka 公开给公共网络,您应该真正使用 SSL/SASL 侦听器,而不是 PLAINTEXT


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2019-07-21
    相关资源
    最近更新 更多