Запись RDD вasticsearch занимает много времени в потоковой Scala Spark - PullRequest
0 голосов
/ 09 декабря 2018

Я разработал потоковое потоковое воспроизведение (подход с приемником), которое считывает данные из kafka, обрабатывает данные и записывает их вasticsearch.

Тот же код был разработан в Java (теперь мы пишем тот же код в Spark Scala) и когдамы сравниваем с производительностью java, у spark не все в порядке.

Что я заметил, так это когда мы пишем в ES, это занимает время.

Вот мой код высокого уровня:

val kafkaStreams: util.List[DStream[String]] = new util.ArrayList[DStream[String]]

for(i <- 0 until topic_threads){
      var data = KafkaUtils.createStream(ssc,kafkaConf,topic).map(line => line._2)
      kafkaStreams.add(data)
    }

// ниже объединения улучшает производительность в соответствии с документацией по искру 1.6.2

val unifiedStream = ssc.union(kafkaStreams)


unifiedStream.persist(StorageLevel.MEMORY_ONLY)
if(flagY){
   val dataES = unifiedStream.map(rdd => processData(rdd))
   dataES.foreachRDD(rdd => {
     ElasticUtils.saveToEs(rdd, index_Name, index_Type)
})

В методе processData я просто анализирую данные, которые мы получили красным цветом от kafka.

Может кто-нибудь сообщить мне ваш опыт или предложения по улучшению производительности подхода с использованием искрового пропаривания (scala).

Из-за этой низкой производительности партии накапливаются и увеличиваются задержки в пакетном планировании.

...