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