Прежде всего, это не глобальное состояние, если вы хотите использовать глобальное состояние, вы должны создать GlobalKtable вместо KTable. Когда вы материализуете свой KTable в хранилище состояний, ваше хранилище состояний разбивается на разделы, и эти разделы распределяются по экземплярам вашего приложения, и каждый экземпляр может только запросить его хранилище состояний, следовательно, имя local state
. Вы можете получить доступ к хранилищу других ваших экземпляров, добавив слой RP C к каждому экземпляру вашего приложения.
- Вы имеете в виду конечную точку сервера? Да.
- Документы Kafka утверждают, что
Kafka Streams will keep track of the RPC endpoint information for every instance of an application, its state stores, and assigned stream partitions through instances of StreamsMetadata.
Используя экземпляр StreamsMetadata
, вы можете получить HostStoreInfo
экземпляра приложения, имеющего раздел содержащий ключ, который вы хотите запросить.
В вашем случае (который вы используете KTable), это локальное состояние, оно поддерживается внутренней топологией журнала изменений Kafka c, которая включает
сжатие журнала , поэтому ваше локальное состояние -
error допуск , ваше местное состояние восстанавливается с помощью этого журнала изменений topi c во время запуска, этот topi c имеет формат:
<application.id>-<your-local-state-store-name>-changelog
Вы можете просмотреть пример того, как вы можете сделать запрос удаленное хранилище состояний для всего приложения здесь .