Kafkaクラスタを使用してJavaクライアントを使用します。クラスタはJump Hostの背後にあるため、アクセスする唯一の方法はSSHトンネル。ただし、コンシューマーはメタデータをフェッチすると、元のホストを使用してブローカーに接続するため、読み取ることができません。この動作は上書きできますか?Kafkaクライアントにメタデータを使用しないように依頼できますか? ?
私の知る限りではありません。
私が同様のことをする必要があるときに私が使用したトリックは、次のとおりです。
/etc/hosts
ファイル。ブローカーnのアドバタイズされたホスト名が仮想インターフェースnのIPに解決されるようにします。Es。
カフカブローカー:
仮想インターフェース:
トンネル:
ssh -L 192.168.1.1:9092:broker1.mykafkacluster:9092 jumphost
ssh -L 192.168.1.2:9092:broker1.mykafkacluster:9092 jumphost
/etc/hosts
:
このようにシステムを構成すると、Kafkaクラスター内のすべてのブローカーに到達できるはずです。
注:ホスト名ではなくIPアドレスをアドバタイズするようにKafkaブローカーを構成した場合、手順は引き続き機能しますが、同じIPで仮想インターフェースを構成する必要がありますブローカーがアドバタイズするアドレス。
ホスト名をアドバタイズする場合は、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>
私にとって絶対的に最善の解決策は、kafkatunnel
( https://github.com/simple-machines/kafka-tunnel )を使用することでした。魅力のように働いた。
次のように sshuttle を試してください:
sshuttle -r user@Host broker-1-ip:port broker-2-ip:port broker-3-ip:port
もちろん、ブローカーのリストは、通知されたリスナーのブローカー設定に依存します。