卡夫卡经纪人是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
我花了几个小时才解决这个问题。好处是解决方案很简单
我的情况是
- 我在AWS的centos上有一个Kafaka服务器,运行在10.155.10.2:9092
- 10.155.10.2:22 对带有 centos RSA 密钥访问的 SSH 开放
我的目标是使用 kafka-node 从我的 win10 通过 SSH 隧道(端口 22)向 10.155.10.2:9092 生成消息
初步努力
在我的win 10中打开cmd窗口并运行 ssh -i pathToMykeyFile -L 9092:10.155.10.2:9092 [电子邮件受保护] 保持此 cmd 窗口打开
在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 中