Почему Apache Kafka Streams использует RocksDB и как его можно изменить?

во время расследования в рамках новых функций в Apache Kafka 0.9 и 0.10, мы использовали KStreams и KTables. Есть интересный факт, что Кафка использует RocksDB внутренне. См. Представляем Потоки Кафки: Обработка Потока Упрощена. RocksDB не написан на языке, совместимом с JVN, поэтому он нуждается в тщательной обработке развертывания, так как ему нужна дополнительная общая библиотека (зависящая от ОС).

и здесь возникают простые вопросы:

  • Почему Apache Kafka Streams использует RocksDB?
  • как это можно изменить?

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

с другой стороны, я вижу некоторые DBs, которые закодированы на Java, и, возможно, они могут сделать это, а также они не переходят через JNI.

1 ответов


RocksDB используется по нескольким (внутренним) причинам (как вы уже упоминали, например, его производительность). Концептуально Kafka Streams не нуждается в RocksDB - он используется как внутренний кэш значений ключей, и любой другой магазин, предлагающий аналогичную функциональность, тоже будет работать.

комментарий от @miguno ниже (перефразировано):

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

комментарий от @miguno выше:

FYI:"RocksDB is not written in JVN compatible language, so it needs careful handling of the deployment, as it needs extra shared library (OS dependent)." как пользователь Kafka Streams вам не нужно ничего устанавливать.

используя Кафка потоки DSL, это в настоящее время (v0.10.0.1) невозможно использовать другое хранилище ключей. Однако будущие релизы позволят подключить что-то еще: https://issues.apache.org/jira/browse/KAFKA-3825

используя Kafka Streams процессор API, вы можете реализовать свой собственный магазин через StateStore интерфейс и подключите его к процессорному узлу в вашей топологии. Даже если это больше работы, это позволяет обойти ограничение тока ДСЛ.