SparkストリーミングからKafkaキューからメッセージを取得します。次のエラーが発生します:
py4j.protocol.Py4JJavaError: An error occurred while calling o30.createDirectStream.
: org.Apache.spark.SparkException: Java.nio.channels.ClosedChannelException
org.Apache.spark.SparkException: Couldn't find leader offsets for Set([test-topic,0])
at org.Apache.spark.streaming.kafka.KafkaCluster$$anonfun$checkErrors$1.apply(KafkaCluster.scala:366)
at org.Apache.spark.streaming.kafka.KafkaCluster$$anonfun$checkErrors$1.apply(KafkaCluster.scala:366)
at scala.util.Either.fold(Either.scala:97)
これが私が実行しているコードです(pyspark):
from pyspark.streaming import StreamingContext
from pyspark.streaming.kafka import KafkaUtils
directKafkaStream = KafkaUtils.createDirectStream(ssc, ["test-topic"], {"metadata.broker.list": "Host.domain:9092"})
ssc.start()
ssc.awaitTermination()
同じエラーで似たような投稿がいくつかありました。すべての場合で、原因は空のkafkaトピックです。「test-topic」にメッセージがあります。
kafka-console-consumer --zookeeper Host.domain:2181 --topic test-topic --from-beginning --max-messages 100
誰が何が問題なのか知っていますか?
私が使用しています:
2つのことを確認する必要があります。
このトピックとパーティションが存在するかどうかを確認してください。あなたのケースでは、トピックはtest-topic
およびパーティションは0です。
コードに基づいて、オフセット0からメッセージを消費しようとしています。メッセージがオフセット0から利用できない可能性があります。最初のオフセットを確認して、そこから消費してみてください。
以下は、最も古いオフセットを確認するコマンドです。
sh kafka/bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list "your broker list" --topic "topic name" --time -1
1)トピックtest-topic
がすでに作成されていることを確認する必要があります
次のコマンドを実行してトピックのリストを確認します
kafka-topics.sh --list --zookeeper [Host or ip of zookeeper]:[port]
2)トピックを確認したら、Socket Server Settings
セクションでKafka構成を構成する必要があります
listeners=PLAINTEXT://[Host or ip of Kafka]:[port]
/ etc/hostsで短いホスト名を定義し、それらをkafkaサーバーの構成で使用する場合は、それらの名前をipに変更する必要があります。または、同じ短いホスト名をローカルPCに登録するか、クライアントの/ etc/hosts。
SparkストリーミングライブラリがPCまたはクライアントの短いホスト名を解決できないため、エラーが発生しました。
トピックが存在しない場合に強制的に作成する別のオプション。これを行うには、次のようにkafkaParamsマップでプロパティ「auto.create.topics.enable」を「true」に設定します。
val kafkaParams = Map[String, String](
"bootstrap.servers" -> kafkaHost,
"group.id" -> kafkaGroup,
"auto.create.topics.enable" -> "true")
Scala 2.11およびKafka 0.10バージョン。
指定したトピックのリーダーが見つからないこのタイプのエラーの理由の1つは、Kafka server configs。
Kafkaサーバー構成を開きます:
vim ./kafka/kafka-<your-version>/config/server.properties
[ソケットサーバーの設定]セクションで、ホストにIPがない場合はそのIPを指定します。
listeners=PLAINTEXT://{Host-ip}:{Host-port}
Kafka MapRサンドボックスで提供されるセットアップを使用していて、kafka sparkコードを介してアクセスしました。設定にIPがないため、my kafkaにアクセスしているときに同じエラーが発生しました。