Хранилища состояний создаются всякий раз, когда вызывается какая-либо операция с состоянием или во время потока окон.
Вы правы, что KTable требуется государственный магазин. KTable - это абстракция потока изменений, где каждая запись представляет обновление. Внутренне это реализовано с использованием RocksDB, где все обновленные значения хранятся в хранилище состояний и в разделе журнала изменений. Хранилище состояний можно в любое время восстановить из раздела журнала изменений.
Хотя KStream имеет другую концепцию, он представляет абстракцию в потоке записи с неограниченным набором данных в формате только для добавления. Он не создает хранилища состояний при чтении исходной темы.
Если вы не хотите видеть обновленный журнал изменений, то можно использовать KStream вместо KTable, поскольку это позволяет избежать создания нежелательного хранилища состояний. KTables всегда дороги по сравнению с KStreams. Также это зависит от того, как вы хотите использовать данные.
Если вы хотите предоставить поток для запроса, вам нужно материализовать поток в хранилище состояний.