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
この問題を解決するのに数時間かかりました。良い点は、解決策が簡単だということです
私の状況は
- 10.155.10.2:9092 で動作する AWS centos に Kafaka サーバーがあります。
- 10.155.10.2:22 centos RSAキーアクセスを使用してSSH用に開く
私の目標は、kafka-nodeを使用してSSHトンネル(ポート22)を介してwin10から10.155.10.2:9092にメッセージを生成することです。
初期の努力
私のWin 10でcmdウィンドウを開き、ssh -i pathToMykeyFile -L 9092:10.155.10.2:9092を実行します。 [Eメール保護] この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 に次を追加します。