簡體   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