Являются ли хранилища Kafka Streams State Store подходящим решением для приложений с сохранением состояния, работающих с большими объемами ключей и данных? - PullRequest
1 голос
/ 08 февраля 2020

Я пытаюсь определить, подходят ли хранилища состояний Kafka Streams для этой проблемы:

  • Топи c будет получать данные, которые будут иметь более 20000 различных ключей.
  • Для каждого ключа из потока мне нужно хранить 12 записей в государственном хранилище, по одной на месяц в году, например, ключ 1:
--------------------------------------------------------
|STATE STORE KEY (key + year-month) | STATE STORE VALUE|
--------------------------------------------------------
|              1-2020-02            |       100.19     |
|              1-2020-01            |       12.0       |
|              1-2019-12            |       19.0       |
|                 ...               |       ...        |
|              1-2019-03            |       1.0        |
--------------------------------------------------------

С ключами 20k я буду хранить 240k пар ключ-значение в государственном магазине. Я знаю, что могу масштабировать приложения Kafka Streams по горизонтали для распространения информации, но:

  • Подходит ли Kafka для решения этой проблемы?
  • Как определить объем оперативной памяти требуется для экземпляра Kafka Streams?
  • Как определить количество дискового пространства, необходимого для RocksDB для экземпляра Kafka Streams?
  • Какие-либо рекомендации по определению большого количества реплик для этой нагрузки?

ОБНОВЛЕНИЕ:

Несколько пояснений:

  1. Я буду использовать интерактивные запросы для доступа к информации по ключу , который, как видно выше, состоит из ключа потока + месяц.

  2. Я действительно обрабатываю данные. Значение, связанное с каждым ключом, является результатом агрегирования данных каждый месяц: данные поступают непрерывно в течение дня и хранятся в среднем за месяц. Мне нужно сохранить агрегирование за последние 12 месяцев.

  3. Я думаю, что реплики также являются фактором нагрузки, так как Kafka распределяет идентификаторы между ними, поэтому все ключи / значения из хранилищ состояний также распределяются между ними, что снижает требования к памяти Например, я прав?

1 Ответ

2 голосов
/ 08 февраля 2020

Кафка хорошо подходит для этой проблемы?

Она будет работать с хранилищем, однако вы не упомянули о необходимости доступа к запросу.

Как определить объем оперативной памяти, необходимой для экземпляра Kafka Streams? Как определить объем дискового пространства, необходимого для RocksDB для каждого экземпляра Kafka Streams?

Похоже, вы просто храните данные, а не обрабатываете их, а хранилища постоянных состояний находятся в куче, поэтому начать с размера кучи по умолчанию и отслеживать его ...

Что касается хранилища, RocksDB - только опция по умолчанию - вы можете реализовать пользовательский поставщик хранилища состояний. Но вы можете определить UTF8 размер ваших строк и количество байтов в двойном, чтобы получить приблизительное представление о размере.

Есть ли какие-либо рекомендации по определению большого количества реплик, чтобы справиться с этой нагрузкой?

Реплики являются фактором доступности, а не обязательно загрузки ... Начните с 3- 5 реплик

...