Use this operator in case you want to release multiple values on every source one. On every message of a source Observable, transforming function is expected to return an Observable that will contain values that'll be pushed through resulting Observable.
Since every reader can regulate pressure, flatMap will not mix messages from one observable with another. It'll even not try to get next flatMap-produced-observable as it'll not acknowledge receiving previous one until it is completed.
Following example will double the message without changing them further: