Я очень новичок в Spark Streaming. У меня есть некоторые основные сомнения. Может кто-нибудь, пожалуйста, помогите мне прояснить это:
Размер моего сообщения стандартный. 1Кб каждое сообщение.
Количество разделов темы составляет 30, и используется подход dstream для получения сообщения от kafka.
Количество ядер, отдаваемых искре, как:
( spark.max.cores=6| spark.executor.cores=2)
Насколько я понимаю, количество разделов Kafka = количество разделов RDD:
In this case dstream approach:
dstream.forEachRdd(rdd->{
rdd.forEachPartition{
}
**Question**:This loop forEachPartiton will execute 30 times??As there are 30 Kafka partitions
}
Также так как я дал 6 ядер, сколько партиций будет израсходовано параллельно из kafka
Вопросы: Это 6 разделов одновременно?
или
30/6 = 5 разделов одновременно?
Может кто-нибудь рассказать немного о том, как это работает в подходе dstream.
"Это 6 разделов одновременно или 30/6 = 5 разделов одновременно?"
Как вы уже сказали, результирующие RDD в Direct Stream будут соответствовать количеству разделов темы Kafka.
На каждом микропакете Spark создаст 30 задач для чтения каждого раздела. Поскольку вы установили максимальное количество ядер равным 6, задание может читать 6 разделов параллельно. Как только одна из задач завершается, можно использовать новый раздел.
Помните, что даже если у вас нет новых данных в одном из разделов, результирующий RDD все равно получит 30 разделов, поэтому да, цикл forEachPartiton
будет повторяться 30 раз в каждом микропакете.