RXScala has three major building blocks or components to perform asynchronous stream programming—Observable, Subscription, and Observer:

Here, we can observe the following things:
- Observable works as a producer; that means it emits the data
 - Observer works as a consumer; that means it consumes the data
 - Subscription works as a channel between Observable and Observer to emit and consume data through this channel
 
The following diagram shows the relationship between RxScala components and how they work with each other:

There are two more components to perform the asynchronous data stream processing:
- Subscriber
 - Scheduler