为什么Kafka Streams强制禁用GlobalKTable状态存储的日志记录?

时间:2018-10-08 17:58:16

标签: apache-kafka-streams

为什么必须在kafka中未启用全局表的日志记录?

代码:

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

当我重启我的kafka应用程序时,globalstore中的所有数据存储都变得干净了。我怎么能忍受呢?

1 个答案:

答案 0 :(得分:2)

GlobalKTable使用其输入主题来确保容错。因此,我不确定您的意思

  

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

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

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