Я пытаюсь понять поведение RocksDB в API процессора потоков Кафки. Я настраиваю постоянный StateStore, используя стандартную RocksDB, которую предоставляют KStreams.
StoreBuilder countStoreBuilder =
Stores.keyValueStoreBuilder(
Stores.persistentKeyValueStore("Counts"),
Serdes.String(),
Serdes.Long())
Я не занимаюсь агрегацией, объединением или обработкой окон. Я просто получаю записи и сравниваю некоторые из них с предыдущими предметами в магазине и храню некоторые из записей, которые я получаю в государственном магазине.
В руководстве разработчика упоминается, что вы можете включить кэши записей в Processor API, вызвав .withCachingEnabled()
в вышеупомянутом компоновщике.
Кэш «служит в качестве кэша чтения для ускорения чтения данных из хранилища состояний» - Кэши записей потоков Kafka
Тем не менее, я понимаю, что RocksDB в постоянном режиме сначала буферизуется в памяти и будет расширяться на диск, только если состояние не помещается в RAM.
RocksDB просто используется в качестве внутренней справочной таблицы (которая может записываться на диск, если состояние не помещается в память
Очистка RocksDB требуется только потому, что состояние может быть больше доступной основной памяти. Kafka Streams Управление внутренними данными
Так как же кэши записей ускоряют чтение из хранилища состояний, если оба буферизируются в памяти? Мне кажется, что кэши записей перекрываются с поведением RocksDB.