web-dev-qa-db-ja.com

Sparkストリーミング+ Kafka:SparkException:セットのリーダーオフセットが見つかりませんでした

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

誰が何が問題なのか知っていますか?

私が使用しています:

  • Spark 1.5.2(Apache)
  • Kafka 0.8.2.0 + kafka1.3.0(CDH 5.4.7)
12
facha

2つのことを確認する必要があります。

  1. このトピックとパーティションが存在するかどうかを確認してください。あなたのケースでは、トピックはtest-topicおよびパーティションは0です。

  2. コードに基づいて、オフセット0からメッセージを消費しようとしています。メッセージがオフセット0から利用できない可能性があります。最初のオフセットを確認して、そこから消費してみてください。

以下は、最も古いオフセットを確認するコマンドです。

sh kafka/bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list "your broker list" --topic "topic name" --time -1 
8
Narendra Parmar

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]

3
Narongsak Mala

/ etc/hostsで短いホスト名を定義し、それらをkafkaサーバーの構成で使用する場合は、それらの名前をipに変更する必要があります。または、同じ短いホスト名をローカルPCに登録するか、クライアントの/ etc/hosts。

SparkストリーミングライブラリがPCまたはクライアントの短いホスト名を解決できないため、エラーが発生しました。

1
user6399397

トピックが存在しない場合に強制的に作成する別のオプション。これを行うには、次のように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
Peter T.

指定したトピックのリーダーが見つからないこのタイプのエラーの理由の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にアクセスしているときに同じエラーが発生しました。

0
Vijay