Я пытаюсь понять Stateful
Stream processor
.
Насколько я понимаю, в этом типе потокового процессора он поддерживает какое-то состояние, используя State Store
.
Я узнал, что одним из способов реализации State Store
является использование RocksDB
. Предполагая следующее topology
(и только один процессор - stateful
)
A-> B -> C; процессор B с сохранением состояния с локальным хранилищем состояний и changelog
включен . Я использую API низкого уровня.
Предполагая, что sp прослушивает один kafka topi c, скажем, topic-1
с 10 разделами.
Я заметил, что при запуске приложения ( 2 экземпляра на разных физических машинах и num.stream.threads
= 5), затем для state store
создается структура каталогов, которая выглядит примерно так:
0_0, 0_1, 0_2 .... 0_9 (на каждой машине по пять итого 10 разделов).
Я просматривал некоторые онлайн-материалы, в которых говорилось, что мы должны создать StoreBuilder
и присоединить его топологию, используя addStateStore()
вместо из создания хранилища состояний внутри процессора.
Примерно:
topology.addStateStore(storeBuilder,"processorName")
Ref also: org.apache.kafka.streams.state.Store
Я не понял, в чем разница в присоединении storeBuilder к топологии против фактического создания хранилища состояний в процессоре . В чем разница между ними?
Вторая часть: для statestore он создает каталог вроде: 0_0, 0_1 et c. Кто и как его создает? Есть ли какое-то сопоставление 1: 1 между темами kafka (которые прослушивает sp) и количеством каталогов, которые создаются для State Store
?