Вообще да, как правило футур хватает. И стандартных джавных очередей из concurrent
я потихоньку делаю клиент для postgresql и делаю его поверх nio сокетов т.е. клиент будет ассинхронным пока все на completable future, но, видимо, мне нужны какие-то стримы, чтобы отдавать строки по мере их вычитки из буфера