Зачем включать кэши записей в API процессора Kafka Streams, если RocksDB буферизируется в памяти? - PullRequest
3 голосов
/ 29 мая 2019

Я пытаюсь понять поведение 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.

1 Ответ

2 голосов
/ 03 июня 2019

Ваше наблюдение верно, и это зависит от варианта использования, если кэширование желательно, если нет. Одним из больших преимуществ кэширования на уровне приложения (вместо кэширования RocksDB) является то, что оно уменьшает количество записей, записанных в раздел журнала изменений, который используется для обеспечения отказоустойчивости хранилища. Следовательно, это уменьшило нагрузку на кластер Kafka, а также может сократить время восстановления.

Для пользователей DSL кэширование также влияет на загрузку в нисходящем направлении (что может вас не заинтересовать для вашего приложения, так как кажется, что вы используете Processor API):

...