Reactive programming is a programming paradigm based on propagating changes and processing data flows. It uses observables to emit items and subscribers to consume those items. Some key aspects are functional reactive programming using lambdas and closures, composing flows in a push-based and asynchronous manner using events. There are reactive extensions for many languages that allow composing asynchronous and event-based programs using observable sequences. RxJava is a library for composing asynchronous and event-based programs for the Java VM using observable sequences. It has common components like observables that emit items, subscribers that consume items, and operators to transform, filter, combine and aggregate observable sequences.