there are basically two operations to merge streams.
1. Union simply merges the input streams such that the resulting stream has the records of all input streams. Union is a built-in operator in the DataStream API. For that all streams must have the same data type.
2. Join connects records of streams according to a join condition. When joining streams, this condition is often based on some time bounds. Join usually needs to be manually implemented using a stateful CoProcessFunction.
Once the streams are unioned or joined, you can apply a time-window on the result stream.