首页 > 解决方案 > 为什么 Kafka Streams 对 GlobalKTable 状态存储强制禁用日志记录?

问题描述

为什么全局表不能在 kafka 中启用日志记录?

代码:

if (loggingEnabled) {
    throw new TopologyException("StateStore " + storeName + " for global table must not have logging enabled.");
}

当我重新启动我的 kafka 应用程序时,globalstore 中的所有数据存储都变得干净了。我怎么可能让它容忍。

标签: apache-kafka-streams

解决方案


GlobalKTables 使用他们的输入主题来保证容错。因此,我不确定你的意思是

当我重新启动我的 kafka 应用程序时,globalstore 中的所有数据存储都变得干净了。

只要正确配置了输入主题并启用了日志压缩,GlobalKTable即使您在本地删除状态,也会在启动时重新创建状态。

启用日志记录没有意义,因为每个KafkaStreams实例都加载整个GlobalKTable数据(即,数据被广播到所有实例)。尽管每个分片使用一个主题分区,但变更日志主题是为共享状态而设计的。因此,这两个概念并不一致,而是相互矛盾。


推荐阅读