通过 ssh 隧道转发 kafka 消费者

通过 ssh 隧道转发 kafka 消费者

卡夫卡经纪人是10.2.1。

这有效:

$ ssh me@jumpbox
me@jumpbox:~$ kafka-console-consumer.sh --bootstrap-server \
                                          "10.200.1.1:9092,10.200.1.2:9092" \
                                        --topic "mytopic"

这不会:

$ ssh me@jumpbox -L 9998:10.200.1.1:9092 \
                 -L 9999:10.200.1.2:9092

### in a new terminal:

$ kafka-console-consumer --bootstrap-server "localhost:9998,localhost:9999" \
                         --topic "mytopic"

为什么不?

答案1

因为kafka代理将重定向消费者以使用原始主机。看到这个,https://stackoverflow.com/questions/45854168/consume-from-a-kafka-cluster-through-ssh-tunnel

答案2

我花了几个小时才解决这个问题。好处是解决方案很简单

我的情况是

  1. 我在AWS的centos上有一个Kafaka服务器,运行在10.155.10.2:9092
  2. 10.155.10.2:22 对带有 centos RSA 密钥访问的 SSH 开放

我的目标是使用 kafka-node 从我的 win10 通过 SSH 隧道(端口 22)向 10.155.10.2:9092 生成消息

初步努力

  1. 在我的win 10中打开cmd窗口并运行 ssh -i pathToMykeyFile -L 9092:10.155.10.2:9092 [电子邮件受保护] 保持此 cmd 窗口打开

  2. 在nodejs中使用以下内容 const client = new kafka.KafkaClient({ kafkaHost: 'localhost:9092 }) ... Producer.send(...)...

结果:请求超时

陷阱:Kakfka 将返回一个要连接的代理地址,而不是直接输入 localhost:9092,重新调整的实际代理地址就像broker-ip-hostname,我得到的返回代理地址是“ip-10-155-10-2”。 ap-southeast-2.compute.internal”我必须深入研究 kafka-node 的源代码才能找到它

解决方案:找到实际代理地址 127.0.0.1 ip-10-155-10-2.ap-southeast-2.compute.internal 后,将以下内容添加到 C:\Windows\System32\drivers\etc\hosts 中

相关内容