It is not uncommon to run into a situation when an Observable is producing emissions faster than an Observer can consume them. This happens particularly during concurrent processing, when the Observable chain has different operators running on different schedulers. Whether it is one operator struggling to keep up with the elements coming from upstream, or the final Observer, a bottleneck can occur in an operator where emissions start to queue up.
Of course, the ideal way to handle a bottleneck is to leverage backpressure using Flowable instead of Observable. The Flowable class is not much different to the Observable class. It differs only in its ability to tell the source to slow down when the Observer requests emissions at its own pace, as we will learn about in Chapter 8, Flowable and Backpressure. But not every source of emissions...