reactor-core/src/main/java/reactor/core/publisher/Flux.java
public static <T> Flux<T> merge(Publisher<? extends Publisher<? extends T>> source, int concurrency, int prefetch) {
		return onAssembly(new FluxFlatMap<>(
				from(source),
				identityFunction(),
				false,
				concurrency,
				Queues.get(concurrency),
				prefetch,
				Queues.get(prefetch)));
	}
public static <T> Flux<T> merge(Publisher<? extends Publisher<? extends T>> source, int concurrency, int prefetch) {
		return onAssembly(new FluxFlatMap<>(
				from(source),
				identityFunction(),
				false,
				concurrency,
				Queues.get(concurrency),
				prefetch,
				Queues.get(prefetch)));
	}
Merge data from {@link Publisher} sequences emitted by the passed {@link Publisher}
into an interleaved merged sequence. Unlike {@link #concat(Publisher) concat}, inner
sources are subscribed to eagerly (but at most {@code concurrency} sources are
subscribed to at the same time).
<p>
<img class="marble" src="doc-files/marbles/mergeAsyncSources.svg" alt="">
<p>
Note that merge is tailored to work with asynchronous sources or finite sources. When dealing with
an infinite source that doesn't already publish on a dedicated Scheduler, you must isolate that source
in its own Scheduler, as merge would otherwise attempt to drain it before subscribing to
another source.

@param source a {@link Publisher} of {@link Publisher} sources to merge
@param concurrency the request produced to the main source thus limiting concurrent merge backlog
@param prefetch the inner source request size
@param <T> the merged type

@return a merged {@link Flux}