今日のソフトウェア開発分野では、コンテナ化テクノロジがますます人気のある展開方法になっています。最も人気のあるコンテナ化ソリューションの 1 つである Docker は、開発者に便利な環境分離および展開方法を提供します。 Kafka をメッセージ キュー システムとして使用する開発者は、Kafka と Docker を組み合わせることで、開発とデプロイメントをより柔軟かつ効率的に行うことができます。この記事では、コンテナ化によってもたらされる利便性を簡単に享受できるように、PHP エディターの Xigua が Docker で Kafka を実行する方法を紹介します。
Confluence ドキュメント (手順 2 ~ 3) の説明に従って、ローカル マシン上に単一ノードの Kafka Docker コンテナをセットアップしました。
さらに、ローカル マシンで実行されているクライアントから接続できるように、Zookeeper のポート 2181 と Kafka のポート 9092 を公開しました。 リーリー
問題: ホストから kafka に接続しようとすると、 アドレス: kafka:9092 を解決できないため、接続が失敗します。
リーリー ###例外:### リーリー
質問:
Docker で実行されている Kafka に接続するにはどうすればよいですか?私のコードはDockerではなくホストから実行されています。注: 理論的には、DNS 設定と /etc/hosts
を試すことができることはわかっていますが、これは回避策です。このようにはならないはずです。
ここにも同様の質問がありますが、
ches/kafka
confluenceinc に基づいた画像を使用していますが、これは異なります。
回避策
機能しません ... hosts ファイル (例: * NIX システム上の /etc/hosts) は、このソリューションは移植性がないため、Kafka ネットワークの問題を解決するために変更しないでください。
1) 接続する正確な IP/ホスト名ポートはどれですか?プロキシ上の値が
advertished.listeners
advertished.host.name と
advertished.port は非推奨のため、これらには設定されません)。
Connection to node -1 (localhost/127.0.0.1:9092) のようなエラーが表示された場合は、アプリケーション コンテナーがそれ自体に接続しようとしていることを意味します。アプリケーション コンテナーでも Kafka ブローカー プロセスが実行されていますか?そうでないかもしれない。
2)
bootstrap.servers
ping IP/ホスト名、
netcat を使用してポートを確認します...クライアントがコンテナ内にある場合は、これをコンテナ (のみ) からではなく、コンテナから行う必要があります。ホスト これを実行してください。コンテナーがすぐにクラッシュしてシェルにアクセスできない場合は、
docker exec を使用します。
3) 別のコンテナではなくホストからプロセスを実行する場合、ポートがホストに正しくマッピングされていることを確認するには、
docker ps
からマッピングされていることを確認してください。 0.0.0.0: 。Docker ネットワークの外部からクライアントを実行しようとする場合、ポートが一致する必要があります。 2 つのコンテナ間でポート転送は必要ありません。link/docker-network
を使用してください。
以下の回答では、
confluenceinc
wurstmeister/kafka
ではありません。 KAFKA_ADVERTISED_HOST_NAME 変数を設定した場合は、それを削除します (これは非推奨のプロパティです)
次のセクションでは、他の画像を使用するために必要なすべての詳細を要約します。その他の一般的に使用される Kafka イメージの場合、 はすべてコンテナ
Apache
で実行されます。
どのように構成されているかにのみ依存します。そして、どの変数
がこれを引き起こしているのか。
ヴルストマイスター/カフカ
リスナー設定に関する Readme セクション 接続性 wiki
もお読みください。 小さな容器が必要な場合は、これらを試してください。イメージは Confluence よりもはるかに小さく、 よりもよく管理されています。
リスナー構成については、Readme ファイル を参照してください。
NOTE: アドバタイズされたホストとポートの設定は非推奨になりました。 Advertisinglistener では両方をカバーしています。 Confluence コンテナと同様に、Debezium は KAFKA_
というプレフィックスが付いたプロキシ設定を使用してプロパティを更新できます。
--overrideadvertising.listeners=kafka:9092
を追加する必要があります...環境変数より移植性が低いと思うので、お勧めしません
lensesio/box
は、スキーマ レジストリ、Kafka Connect などを備えたオールインワン ソリューションに最適ですが、のみ
Kafkaが必要な場合は、肥大化しているように見えます。また、これはコンテナ内で複数のサービスを実行する場合の Docker のアンチパターンです
独自の
docker-composeおよびネットワーク図については、このブログの執筆者: @rmoff
を参照してください。
###答え###
kafka:9092 への接続の問題は、(Docker ブリッジを使用して) 独自のコンテナーで Kafka クライアント コードを実行することで回避できますが、それ以外の場合は、環境変数をコンテナ Docker ネットワーク内で動作しながら、外部の世界に公開されます。
最初に、PLAINTEXT_HOST:PLAINTEXT
のプロトコル マッピングを追加します。これは、リスナー プロトコルを Kafka プロトコルにマップします。
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
値:
次に、異なるポート上に 2 つのアドバタイズされたリスナーを設定します。 (ここでの
kafka は Docker コンテナ名を指します。
broker
キー:
KAFKA_ADVERTISED_LISTENERS
値:
ここでのプロトコルは、上記のプロトコル マッピング設定の左側の値と一致することに注意してください。
-p 29092:29092 を追加し、PLAINTEXT_HOST
リスナーに通知します。
つまり...(
上記の設定を使用します)
が機能しない場合は、KAFKA_LISTENERS に
を含めるように設定できます。どちらのオプションも広告設定と Docker 転送ポートに一致します
クライアントはコンテナ内ではなく、同じマシン上にあります
ローカルホストと関連ポートをアドバタイズすると、ご想像のとおり、コンテナの外部に接続できるようになります。
つまり、Docker ネットワークの外部で Kafka クライアントを実行する場合 (ローカルにインストールした CLI ツールを含む)、
Zookeeper として (Docker が必要) ポート転送)
別のマシン上のクライアント
外部サーバーから接続しようとしている場合は、ホストの外部ホスト名/IP (例: 192.168.x.y
)
Kafka プロトコルは構成済みのリスナーを引き続きアドバタイズするため、ポート転送を介して localhost をアドバタイズするだけでは機能しません。
この設定では、同じローカル ネットワーク内にない場合、Docker ポート転送 および ルーター ポート転送 (およびファイアウォール/セキュリティ グループの変更) が必要です。たとえば、コンテナがクラウドで実行されており、そこから操作したい場合などです。ローカルコンピュータ。
同じホスト上のコンテナ内のクライアント (または別のプロキシ)
Docker ネットワーク でアプリケーション
を実行する場合は、ブートストラップ サーバーとしてPLAINTEXT
リスナー構成を参照) を使用します。# を使用します。 ##zookeeper:2181 Zookeeper として、他の Docker サービス通信と同様 (ポート転送は必要ありません)
別の docker run
コマンドまたは Compose ファイルを使用する場合は、compose networks
セクションまたは docker network --create# を使用して共有を手動で定義する必要があります。 ## ## #通信網######
を、単一ブローカーについては より単純な
を参照してください。 <p> 複数のプロキシを使用する場合は、リスナーのアドバタイズに一意のホスト名を使用する必要があります。 <a href="https://www.php.cn/link/38a8e18d75e95ca619af8df0da1417f2" rel="nofollow noreferrer">例を見る一个></a></p>
<h1>関連する質問</h1>
<p><a href="https://www.php.cn/link/d6b6536a9a9352f17189a9dff2f569b6">Docker (ksqlDB) からホスト上の Kafka に接続する </a>#
###付録###
</p>Kubernetes<h1> デプロイメントに興味のある方: </h1>
<p>
<strong></strong>Kafka にアクセスする </p>
<ul>#演算子 (推奨): <li>https://www.php.cn/link/61b07251e835d37322b7460d2b88c05b<a href="https://www.php.cn/link/792b765aa995daf26cf6f17f519c949d" rel="nofollow noreferrer"></a>
</li>Helm アーティファクト ハブ: <li>https://artifacthub.io/packages/search ?ts_query_web=kafka&sort=stars&page=1<a href="https://www.php.cn/link/61b07251e835d37322b7460d2b88c05b" rel="nofollow noreferrer"></a>
</li>
</ul>
以上がDocker で実行されている Kafka に接続しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。