#scala #apache-spark #apache-kafka #apache-spark-sql #kafka-consumer-api
Вопрос:
Я использую пакет spark (не потоковую передачу) для передачи данных из kafka в hdfs. Код довольно прост,
val df = spark.read.format("kafka").
option("kafka.bootstrap.servers","abc:9092").
option("subscribe","xyz").
option("startingOffsets","earliest")
df.write.format("avro").save("/hdfs/path")
Тема кафки «xyz» состоит из 12 разделов, и каждый раздел содержит 5-7 ГБ данных. Задание spark выполняется с 12 исполнителями, каждый из которых имеет 1 ядро и 3 ГБ оперативной памяти.
Что я замечаю, так это то, что, хотя исполнители в значительной степени выполняют одно и то же с аналогичными данными/объемом, время выполнения значительно отличается(самые быстрые исполнители в 2 раза быстрее, чем самые медленные исполнители). Предполагая, что есть некоторое регулирование чтения/записи.
Я уже пробовал увеличить следующие настройки без особого влияния,
kafka.max.poll.records (=100000)
kafka.max.partition.fetch.bytes (=1MB)
kafka.fetch.max.bytes (=50MB)
Любые идеи / указатели, что может быть причиной дросселирования?