私はドッカーコンテナの中でカフカを実行しています。私はコンテナ内にコピーして、それを実行することができ、簡単なプログラムを書かれている次のコマンドドッカー内で実行中のカフカにメッセージを公開
docker run --rm -p 2181:2181 -p 9092:9092 -p 8081:8081 --env
ADVERTISED_HOST=\`docker-machine ip \\`docker-machine active\\`` --env
ADVERTISED_PORT=9092 -v
/Users/abhishek.srivastava/MyProjects/KafkaTest/target/scala-2.11:/app
-it -- name kafka spotify/kafka bash
を使用して、私のコンテナを起動し、それが完璧に動作します。
object KafkaProducerString {
def SendStringMessage(msg: String) : Unit = {
val inputRecord = new ProducerRecord[String, String]("test", null, msg)
val producer: KafkaProducer[String, String] = CreateProducerString
val rm = producer.send(inputRecord).get(10, SECONDS)
println(s"offset: ${rm.offset()} partition: ${rm.partition()} topic: ${rm.topic()}")
producer.close()
}
private def CreateProducerString: KafkaProducer[String, String] = {
val props = new Properties()
props.put("bootstrap.servers", "localhost:9092")
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer")
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer")
props.put("batch.size", "0")
props.put("client.id", "1")
val producer = new KafkaProducer[String, String](props)
producer
}
}
しかし、私はコンテナの外から(my macから)この同じプログラムを実行します。私の理解では、カフカの生産のためのリモート私は開く必要がある唯一のポートは2181(飼育係していることをということでした私は
[error] (run-main-0) java.util.concurrent.TimeoutException: Timeout after waiting for 10000 ms.
java.util.concurrent.TimeoutException: Timeout after waiting for 10000 ms.
at org.apache.kafka.clients.producer.internals.FutureRecordMetadata.get(FutureRecordMetadata.java:50)
at org.apache.kafka.clients.producer.internals.FutureRecordMetadata.get(FutureRecordMetadata.java:25)
at com.abhi.KafkaProducerString$.SendStringMessage(KafkaProducerString.scala:23)
at com.abhi.KafkaMain$$anonfun$main$1.apply$mcVI$sp(KafkaMain.scala:19)
at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:160)
at com.abhi.KafkaMain$.main(KafkaMain.scala:17)
at com.abhi.KafkaMain.main(KafkaMain.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
このエラーが出る
[私はdocker-machine ip
からの出力には「localhost」を置き換えます] )と9092(カフカ)と私はこれらを開いたことを見ることができます。
でも同じプログラムをコンテナの外で実行するとタイムアウトしますが、コンテナの内部では(localhostを使用して)動作します。
編集::以下の提案に基づいて、私は次の
docker run --rm -p 127.0.0.1:2181:2181 -p 127.0.0.1:9092:9092 -p
127.0.0.1:8081:8081 --env ADVERTISED_HOST=`docker-machine ip \`docker-machine
active\`` --env ADVERTISED_PORT=9092 -v
/Users/abhishek.srivastava/MyProjects/KafkaTest/target/scala-2.11:/app -it --
name kafka kafka_9.0 bash
と
docker run --rm -p 0.0.0.0:2181:2181 -p 0.0.0.0:9092:9092 -p 0.0.0.0:8081:8081
--env ADVERTISED_HOST=`docker-machine ip \`docker-machine active\`` --env
ADVERTISED_PORT=9092 -v
/Users/abhishek.srivastava/MyProjects/KafkaTest/target/scala-2.11:/app -it --
name kafka kafka_9.0 bash
を試みたが、これらの問題を解決していません。
こんにちは、私も同じ問題に直面しています。それは解決されましたか? – maverick
私はあきらめました:)時間があるときにもう一度試してみるでしょう。以下の解決策を確認してください。それが動作するかどうか私に知らせる:) –
私はwurstmeisterカフカドッカーを使用しています。すべてがドッカー内で動作しますが、ホストマシン上のプロデューサ/コンシューマ用のコードはkafkaブローカに接続できません。私は何かが起きたときにこれをトラブルシューティングしています。私はあなたに知らせます – maverick