We use RabbitMQ because we need to utilize messaging at various different places in our infrastructure. From real time message ingestion, to asynchronously reacting to user actions. It uses AMQP, it's easy to set up and manage and having it installed and set up on our instances prevents vendor lock in issues.
We use Scala because it's the main language behind Apache Spark. We're now using it outside of the Spark ecosystem, because it runs on the JVM and we can share libraries between Scala and Java. It allows us to write complex code in a very concise manner using functional programming principles.