【问题标题】:Why does Kafka Streams enforce logging disabled for GlobalKTable state stores?为什么 Kafka Streams 对 GlobalKTable 状态存储强制禁用日志记录?
【发布时间】:2018-10-08 17:58:16
【问题描述】:

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

代码:

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

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

【问题讨论】:

    标签: apache-kafka-streams


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,我在重新启动应用程序时正在执行 stream.cleanUp(),这就是为什么我的状态在重新启动时得到清理。所以简而言之,全局存储不会更改日志主题,并且每个实例每次启动时都会创建本地存储。
    • 没错。但是,不建议每次都拨打cleanUp()。如果不调用,全局存储不需要重新创建,启动会更快。
    • 假设我在从主题获取数据后将数据存储在 Globalstore 中时进行了一些自定义处理,即我正在从消息的值创建自定义键。在删除状态后是否会以相同的方式再次恢复 Globalstore本地。
    猜你喜欢
    • 2020-04-01
    • 2021-01-28
    • 2019-07-03
    • 1970-01-01
    • 2018-10-24
    • 2021-01-04
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多