私は、KafkaパーティションとSpark RDDパーティションとの間に存在し、最終的にSpark Taskの間に存在する自動マッピングを理解しました。しかし、(コアの数で)My Executorのサイズを正しく設定するためには、最終的に私のノードとクラスタのサイズを決めるために、私は文書の中ではっきりと見えるものを理解する必要があります。スパークストリーミングKafkaダイレクトストリーミングAPIと並列処理
- はカフカパーティション両方に対応スパークタスクを行います正確言い換えれば、タスク割り当て VSデータ処理対データ消費機能しない方法火花ストリーミングにおいて
を読み取り、データをすべて処理しますか?
この質問の背後にある合理的には、以前のAPIで、 であることを、ベースの受信機は、TASKがあなたのエグゼキュータの数タスクスロットはなかった意味、 のデータを受信するために捧げられたということですデータ用に予約されており、処理のためにそこに残りました。これは が、コアの期間で実行プログラムのサイズをどのように決定するかに影響しました。
例えばローカル --master
で火花ストリーミングを起動する方法についてのアドバイスをください。 コアの一つは、その決して 両端長い受信タスク、および他のコアの実行専用されますので、誰もが、 1は、ローカルを置く必要があり、スパーク・ストリーミングの場合には、[2]最小のものを言うだろうデータ処理を行います。答えは、この場合には、タスクは一度読ん と処理の両方を行うことで、次の、その後、質問、
本当に賢いということであればだから、私は意味し、これは、非同期のように聞こえます。私たちは次の処理でデータを処理する間に取り込むことができる
になりたがっています。データは既にそこに です。しかし、コアが1つだけであれば、もっと正確に
にデータを読み込んで処理すると、どのようにして両方とも
パラレルで実行できます。私の元には理解は持っているだろう事は何とかタスクは打ち上げが読みけど
処理が別のタスクで実行されることになり、という意味で 同じまま、ということでした。つまり、
処理タスクがまだ実行されていない場合、一定のメモリ制限である まで読み取りを続けることができます。
正確にここで何が起こっているのか明瞭に説明できますか?
EDIT1
私たちも、このメモリ制限制御を持っている必要はありません。処理が行われている間にフェッチすることができ、そこですぐに停止するという単純な事実。言い換えれば、2つのプロセスは非同期でなければならず、限界は単に一歩先に進むことです。私にはどういうわけかこれが起こっていなければ、Sparkがパフォーマンスを損なうようなものを実装することは非常に奇妙です。
「Structured Streaming、TopicPartitionとワーカー/エグゼキュータの間には粘着性がありますか?」という記述がありますか?私はそれについてもっと学ぶことに興味があります。 – maasg
@maasg https://github.com/apache/spark/blob/master/external/kafka-0-10-sql/src/main/scala/org/apache/spark/sql/kafka010/KafkaSource.scala#L274 –
@Yuval Itzchakov私はあなたが私が持っていたパフォーマンスの質問に答えなかったと疑ったものの一部を確認しますが、私は答えを見つけたと思います。それは、カフカの新しいコンシューマAPIであり、プリフェッチを行い、それに続いてスパークキャッシュするという機能です。プリフェッチに関する詳細は、https://cwiki.apache.org/confluence/display/KAFKA/KIP-41%3A+KafkaConsumer+Max+Records#KIP-41:KafkaConsumerMaxRecords-Prefetchingを参照してください。 – MaatDeamon