2015-06-08 3 views
3

В моем искрообразовании я читаю из темы кафки. В этом разделе есть 10 разделов, поэтому я создал 10 приемников с одним потоком на приемник. При такой конфигурации я могу наблюдать странное поведение приемников. Срединные ставки для этих потребителей являются:Spark streaming + пропускная способность kafka

Receiver-0 node-1 10K 
Receiver-1 node-2 2.5K 
Receiver-2 node-3 2.5K 
Receiver-3 node-4 2.5K 
Receiver-4 node-5 2.5K 
Receiver-5 node-1 10K 
Receiver-6 node-2 2.6K 
Receiver-7 node-3 2.5K 
Receiver-8 node-4 2.5K 
Receiver-9 node-5 2.5K 

Проблема 1: узел-1 получает столько сообщений, как и другие 4 вместе.

Задача 2: Приложение не достигает предела производительности партии (30 секундные партии вычисляются в среднем времени 17 секунд). Я бы хотел, чтобы он потреблял достаточно сообщений, чтобы сделать это как минимум 25 секунд времени вычисления.

Где я должен искать узкое место?

Чтобы быть ясным, есть больше сообщений, которые нужно использовать.

@Edit: У меня было отставание только на двух разделах, поэтому первая проблема решена. Тем не менее, чтение 10k msgs в секунду не очень много.

ответ

1

Используйте Sparks встроенные в противодавления (с Спарк 1.5, который не был доступен во время Вашего вопроса): https://github.com/jaceklaskowski/mastering-apache-spark-book/blob/master/spark-streaming-backpressure.adoc

Просто установите

spark.streaming.backpressure.enabled=true 
spark.streaming.kafka.maxRatePerPartition=X (really high in your case) 

Чтобы найти узкое место, вы должны использовать WebUI of Sparkstreaming и посмотрите на DAG этого процесса большую часть времени ...

Смежные вопросы