Использование bufferCount(N)
буферизует N выпусков и отправляет и объединяет массив:
Собирает отправленные значения до тех пор, пока заданное число не будет выполнено, испускает как массив
const final = concat(source, source2).pipe(
tap(v => arr.push(v)),
bufferCount(3),
tap(v => console.log(v))
);
Это создаст массив из каждых 3 значений и выведет их на консоль.