[英]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.