Primeiro, só tu tens o contexto completo pra tomar uma decisão dessas.
Dito isso...
Como avisaste que estás usando knex, já assumo que estás usando js/ts. Dessa forma, posso presumir que estavas falando sobre "Observables" do RxJS, quando falaste de "observers".
Dado esse micro contexto, eu optaria por fazer uma transaction pelo knex, simplesmente pelo princípio KISS (keep it simple, stupid). Os observables do rxjs são bons pra problemas onde é preciso se aplicar filas, buffers e/ou pipelines. Pra essa situação, onde é preciso esperar que todas as informações sejam inseridas no banco de dados antes de dar uma mensagem de sucesso ou erro, o bom é velho beginTransaction -> inserts -> commit (ou rollback, em caso de erro) é a melhor solução.
Espero ter ajudado 😁