繁体   English   中英

kafka 流状态存储保存在哪里?

[英]Where are kafka streams state stores saved?

我有一个 kafka 流应用程序,我在其中使用状态存储。 我从几个地方读到状态存储支持在 /tmp 目录下的本地rocksdb实例中。 但是在我的应用程序中,如果我停止它并从 /tmp 中删除应用程序 kafka 流目录,我仍然能够将我的状态存储恢复到以前的状态。 这意味着状态根本不存储在rocksdb中,或者同时存储在kakfa和本地rocksdb中。 所以我的问题是,状态存储在哪里,并且由于我使用的是 docker,将 /tmp/kafka-streams 目录持久化到卷是否有任何性能或任何其他好处? 我的测试代码如下

StoreBuilder<KeyValueStore<String, String>> testStoreBuilder = Stores
            .keyValueStoreBuilder(Stores.persistentKeyValueStore("test-store"), Serdes.String(), Serdes.String())
            .withCachingEnabled();
    builder.addStateStore(testStoreBuilder);

    final KStream<String, String> sensorDataStream = builder.stream("test");

    sensorDataStream.transformValues(() -> new ValueTransformer<String, String>() {
        private KeyValueStore<String, String> testStore;

        @SuppressWarnings("unchecked")

        @Override
        public void init(ProcessorContext context) {
            testStore = (KeyValueStore<String, String>) context.getStateStore("test-store");
        }

        @Override
        public String transform(String value) {
            LocalDateTime start = LocalDateTime.now();
            System.out.println(testStore.get("test"));
            testStore.put("test", value);
            System.out.println("DURATION:: " + Duration.between(start, LocalDateTime.now()).toMillis());
            return null;
        }

        @Override
        public void close() {
        }
    }, "test-store");

当使用 Apache Kafka 依赖项时,Streams 存储在/tmp 如果使用 Confluent 依赖项,它在/var/lib ,我想。

RocksDB 由存储在 Kafka 中的消费变更日志主题支持。

如果要清除所有状态,请使用应用程序重置工具

因为我正在使用 docker

除非您在应用程序运行之间删除/重建映像,否则这无关紧要,因为 Docker 仍会写入主机的文件系统

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM