#apache-kafka #apache-kafka-streams #rocksdb
#apache-kafka #apache-kafka-streams #rocksdb
Вопрос:
Я не уверен, что на это уже дан ответ. Поскольку я не получил надлежащего объяснения, разместив свой вопрос здесь.
Почему kafka streams state.dir
хранится под /tmp/kafka-streams
?
Я знаю, что могу изменить путь, указав конфигурацию каталога состояния в коде потока, как показано ниже
StreamsConfig.STATE_DIR_CONFIG,"/var/abc-Streams"
Но будет ли какое-либо влияние изменения каталога?
или
Могу ли я настроить базу данных состояния в каталоге приложения, а не в /tmp
.
Согласно документации confluent, для: Stateful
операций :
automatically creates and manages such state stores when you are calling stateful operators such as count() or aggregate(), or when you are windowing a stream
но не указал, где именно он хранится.
Есть мысли?
Комментарии:
1. @cricket_007: Есть мысли о последствиях изменения каталога хранилища состояния? В моем случае, только сегодня я изменил его, и, как ни странно, все сообщения отправились вниз по потоку! Например. Данные из раздела A -> aggregate (..) -> в раздел B, все события были снова созданы для раздела B, но не повторно использованы из A.
Ответ №1:
Почему kafka streams state.dir хранится в /tmp / kafka-streams?
Есть несколько причин.
- Обычно
/tmp
каталог имеет разрешение на запись по умолчанию. Таким образом, вам не придется бороться с правами на запись как новичку. /tmp
каталог недолговечен. При каждой перезагрузке системы он очищается, следовательно, вы не сталкиваетесь с переполнением дискового пространства на случай, если вы забыли удалитьstate.dir
. Недостатком является то, что вы теряете состояния из предыдущего запуска, следовательно, вам нужно перестроить состояния с нуля.
Если вы хотите повторно использовать состояния, сохраненные в state.dir
, вы должны хранить его где-нибудь, кроме /tmp
.
Все хранилища состояний хранятся в расположении, указанном в state.dir
. Если не указано, это /tmp/kafka-streams/<app-id>
каталог.