Приложение My Spark обрабатывает сообщения от Кафки и записывает их в Cassandra.Через 3 часа скорость обработки почти внезапно меняется.Если размер партии равен 10000, то начальная ставка хорошая, но через 3 часа она уменьшается вдвое.Если размер партии 3000, то начальная скорость довольно низкая, но она увеличивается на несколько% через 3 часа.
То, что я нашел до сих пор:
- Это не проблема утечки памяти, время GC составляет около 1%, а объем памяти низкий.
- Это не такпроблема утечки соединения: скорость увеличивается, если я использую небольшие партии.
- Когда приложение работает медленно, исполнители проводят большую часть времени в методе, генерируемом кодом
SpecificPredicate.EqualTo_4
.Я не понимаю, почему этот метод становится узким местом. - Когда я устанавливаю
spark.sql.autoBroadcastJoinThreshold
= "-1", скорость падает через 10 часов.
Я широко использую Spark SQLс множественным объединением, поэтому моя теория заключается в том, что Spark Catalyst применяет некоторые «оптимизации».