web-dev-qa-db-ja.com

KafkaクラスタからSSHトンネルを介して消費する

Kafkaクラスタを使用してJavaクライアントを使用します。クラスタはJump Hostの背後にあるため、アクセスする唯一の方法はSSHトンネル。ただし、コンシューマーはメタデータをフェッチすると、元のホストを使用してブローカーに接続するため、読み取ることができません。この動作は上書きできますか?Kafkaクライアントにメタデータを使用しないように依頼できますか? ?

15
Sourabh

私の知る限りではありません。

私が同様のことをする必要があるときに私が使用したトリックは、次のとおりです。

  1. Kafkaブローカーごとに仮想インターフェースをセットアップする
  2. 各ブローカーへのトンネルを開き、ブローカーnが仮想インターフェースnにバインドされるようにします
  3. /etc/hostsファイル。ブローカーnのアドバタイズされたホスト名が仮想インターフェースnのIPに解決されるようにします。

Es。

カフカブローカー

  • broker1(broker1.mykafkaclusterとしてアドバタイズ)
  • broker2(broker2.mykafkaclusterとしてアドバタイズ)

仮想インターフェース

  • veth1(192.168.1.1)
  • veth2(192.168.1.2)

トンネル

  • ブローカー1:ssh -L 192.168.1.1:9092:broker1.mykafkacluster:9092 jumphost
  • broker2:ssh -L 192.168.1.2:9092:broker1.mykafkacluster:9092 jumphost

/etc/hosts

  • 192.168.1.1 broker1.mykafkacluster
  • 192.168.1.2 broker2.mykafkacluster

このようにシステムを構成すると、Kafkaクラスター内のすべてのブローカーに到達できるはずです。

注:ホスト名ではなくIPアドレスをアドバタイズするようにKafkaブローカーを構成した場合、手順は引き続き機能しますが、同じIPで仮想インターフェースを構成する必要がありますブローカーがアドバタイズするアドレス。

9
nivox

ホスト名をアドバタイズする場合は、SSHトンネルを介してブローカーにアクセスするために、仮想インターフェイスを実際に追加する必要はありません。クライアントの/etc/hostsにhostsエントリを追加し、追加した名前にトンネルをバインドするだけで十分です。

broker.kafkaclusterがブローカーのadvertised.hostnameであると仮定します。

/etc/hosts
127.0.2.1 broker.kafkacluster

トンネル:
ssh -L broker.kafkacluster:9092:broker.kafkacluster:9092 <brokerhostip/name>

3
fwendlandt

私にとって絶対的に最善の解決策は、kafkatunnelhttps://github.com/simple-machines/kafka-tunnel )を使用することでした。魅力のように働いた。

1
lindelof

次のように sshuttle を試してください:

sshuttle -r user@Host broker-1-ip:port broker-2-ip:port broker-3-ip:port

もちろん、ブローカーのリストは、通知されたリスナーのブローカー設定に依存します。

0
injecto