2017-12-26 11 views
0

私たちはspark-streaming-kafka-0-8レシーバを使用しています。 numPartitionsを増やしてイベントの消費量を増やすことはできません。 numPartitionsの増加はパフォーマンスに影響しないようです。Spark Streaming Kafka Receivers API-numPartitions

KafkaUtils.createStreamメソッドは、topic_nameからnumPartitionsまでのマップを持ちますが、各パーティションはそれぞれのスレッドで使用する必要があります。

現在我々が取り組んでいる: - 1つのスレッドを使用した場合よりもはるかに多くのイベントを引っ張ってくるが、それはない

KafkaUtils.createStream[Integer, Event, IntegerDecoder, EventDecoder](ssc, 
    Configuration.kafkaConfig, scala.collection.immutable.Map(topic -> 1), 
    StorageLevel.MEMORY_AND_DISK) 

私はscala.collection.immutable.Map(> 10トピック)が使用して期待します

しかし、もっと多くのカフカレシーバを作成すると(私の理解ではスレッドの増加と全く同じです)、パフォーマンスを改善します。

これはバージョン0-8の問題ですか? numPartitionsを増やすと、消費されるイベントの量が増えるはずですか? numPartitionを増やしている間に受信者を追加するとパフォーマンスが向上するのはなぜですか?

答えて

1

これはバージョン0-8の問題ですか?

いいえ、それはあなたがcreateStreamで使用しているものである受信機ベースのアプローチ、と「問題」です。上記のアプローチは、所与のエグゼキュータ・ノード上で消費するための単一スレッドを生成する。同時に読み込みたい場合は、そのような受信者を複数作成する必要があります。 documentationパー

:カフカで

トピックパーティションは、Sparkストリーミングで発生したRDDS のパーティションに相関しません。したがって、 個のトピック固有のパーティションをKafkaUtils.createStream()にだけ増やすと、 は、1つの受信機で で消費されるトピックを使用するスレッドの数を増加させます。これは、消費のために与えられた執行ノードにそれぞれTopicPartitionを派遣データ

あなたは(KafkaUtils.createDirectStreamを使用して)直接(receiverless)ベースのアプローチを使用して、同時実行性を高めたい場合は

を処理中 スパークの並列性を増加させませんすべてのエグゼクティブがカフカからの消費に参加できるようにする

関連する問題