数日前、私はドッカー構成し、ポートマッピングとカフカドッカーコンテナを設定しようとしたと私は完全には理解していない興味深い振る舞いを発見:なぜカフカブローカーはそれ自体に接続しますか?
カフカのブローカーは、自身に接続するように思えます。どうして ?
私のセットアップは、次のとおりです。
- のUbuntu 14.04、ドッカー1.13.1、ポート9092上の1.5.2
- カフカ0.10リッスンをドッカーは、作曲、このポートは、コンテナで公開されています。ドッカー作曲で
- 私はローカルポートにコンテナポート9092からポートマッピングを持っている4005
- ブローカーは私から見えるはずですので、私は私のドッカーホスト・マシンとadvertised.listenersで作曲からローカルポートのホスト名(
docker-host:4005
)を構成し企業ネットワーク。 、advertised.listeners
にポートとホスト名の様々な組み合わせを試した後Topic metadata fetch included errors: {topic_name=LEADER_NOT_AVAILABLE}
:これにより
は私が/カフカからフェッチ/データを送信しようとすると、すべての試みは、で終わる設定しました私は唯一の組み合わせがlocalhost:9092
であることを発見しました。ホスト名またはポートを変更しようとすると、上記のエラーが発生しました。
これは、Kafkaがadvertised.listeners
で設定されたアドレスに接続しようとしていると思いました。これは、トピックのメタデータと何らかの形で関連しています。私はドッカー容器内だから、
:
- リダイレクトトラフィック
sed -r -i "s/#(listeners)=(.*)/\1=PLAINTEXT:\/\/0.0.0.0:4005/g" $KAFKA_HOME/config/server.properties
(宣伝正確として)すべてのインターフェイスとポートをリッスンするように
echo "127.0.0.1 $ADVERTISED_HOST" >> /etc/hosts
- のconfigureカフカをループバックする「ドッキングウィンドウ・ホスト」へ
- "ドッカーホスト"と外部ポートを広告する
sed -r -i "s/#(advertised.listeners)=(.*)/\1=PLAINTEXT:\/\/$ADVERTISED_HOST:4005/g" $KAFKA_HOME/config/server.properties
そして今は魅力的です。
私はまだ理解していないしかし:
- なぜカフカブローカーは
advertised.listeners
で設定されたアドレスを経由して自分自身に接続する必要があるのでしょうか? - これを無効にする方法、または少なくとも「リスナー」プロパティ(デフォルトのKafkaポート)からのアドレスを使用するように設定する方法はありますか?
UPD 価値に言及するが、動作しない設定を以下:カフカは0.0.0.0:9092
をリッスンし、アドバタイズされたリスナーがdocker-host:4005
に設定されています。
この場合、消費者または生産者がカフカに接続するたびに、LEADER_NOT_AVAILABLEを受信します。 状態SYN_SENTのdocker-host:4005に対するnetstat(コンテナ内)の接続もあります。
UPD 2 はカフカと同様の問題があるように見えるが、AWS内部hereが記載されています。
私の場合、異なるカフカポートを使いたいという違いがあります。
UPD 3 [OK]を、セットアップが動作しません最初UPD段落で述べた理由である - UFW、ホストマシンを経由して自身にドッキングウィンドウコンテナから行くいくつかの理由がブロックトラフィック用。
こんにちはSönkeの上に、あなたの答えのおかげで、あなたは右の「リスナー」と「advertised.listener」の意味について見ますまだ動作しません。 – Grigory