SSHトンネルを介してKafkaの消費者を渡す

SSHトンネルを介してKafkaの消費者を渡す

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. 10.155.10.2:9092 で動作する AWS centos に Kafaka サーバーがあります。
  2. 10.155.10.2:22 centos RSAキーアクセスを使用してSSH用に開く

私の目標は、kafka-nodeを使用してSSHトンネル(ポート22)を介してwin10から10.155.10.2:9092にメッセージを生成することです。

初期の努力

  1. 私のWin 10でcmdウィンドウを開き、ssh -i pathToMykeyFile -L 9092:10.155.10.2:9092を実行します。 [Eメール保護] この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 に次を追加します。

関連情報