【问题标题】:How global state store differ from normal state store in kafka?全局状态存储与 kafka 中的普通状态存储有何不同?
【发布时间】:2020-03-09 18:40:27
【问题描述】:

全局状态存储与普通状态存储有何不同?

全局状态存储是否在不同机器上运行的所有实例中都有数据副本? 在重新启动的情况下它的行为如何,因为在我的场景中全局状态存储不使用任何更改日志主题来恢复全局存储中的源主题没有密钥。

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。避免一次问多个不同的问题。请参阅How to Ask 页面以获得澄清此问题的帮助。
  • 改变它现在看起来很简单的问题有足够的细节
  • 您是在询问 GlobalKTable 和 Streams 状态存储(使用 RocksDB)之间的区别吗?
  • 我想知道全局状态存储是如何工作的,它在内部创建任何更改日志主题以在机器重新启动时进行恢复。因为在我的场景中,全局状态存储的源主题没有键 [key is null] 所以当我重新启动机器时。全局状态存储直接从源主题加载数据
  • 使用前请阅读confluent-kafka的标签说明。它与 Kafka Streams 无关

标签: java apache-kafka apache-kafka-streams


【解决方案1】:
  1. 全局状态存储是否在不同机器上运行的所有实例中都有数据副本?

    是的。

  2. 由于全局状态存储不使用任何更改日志主题来恢复在我的场景中,全局存储中的源主题没有密钥,因此它在重新启动时的行为如何:
    • GlobalKTable 默认禁用日志记录,因此它不会将更改日志推送到GlobalKTable 的更改日志主题(尽管它仍然创建更改日志主题)。您必须从启用日志压缩 (cleanup.policy=compact) 的输入主题将数据重新填充到 GlobalKTable,其中消息的键是您要在 GlobalKTable 中查找的键。当您重新启动应用程序时,Kafka Stream 只会将输入主题中的数据重新填充到GlobalKTable
    • 在我的场景中,来自全局存储的源主题没有键:您必须使用 KeyValueMapper 将源主题映射到我上面提到的新主题,并在输出主题上启用日志压缩。

【讨论】:

  • 全局状态存储不创建任何更改日志主题进行恢复?或者唯一的解决方案是将数据重新分区到另一个主题,该主题将成为全局状态存储的源主题
  • 全局状态使用输入主题而不是变更日志主题进行恢复,但他们确实创建了变更日志主题,文档docs.confluent.io/current/streams/concepts.html#globalktable中没有明确说明
  • 阅读您的问题后,我运行了一个简单的拓扑来检查并对此感到非常惊讶。你可以在这里阅读更多内容stackoverflow.com/questions/52707748/…
  • "唯一的解决方案是将数据重新分区到另一个主题,该主题将是全局状态存储的源主题",并且该主题必须启用日志压缩
  • client_id 可以有多个用户。 stackoverflow.com/questions/60613596/…为此创建了新问题
猜你喜欢
  • 1970-01-01
  • 2020-08-29
  • 2019-07-03
  • 2020-06-27
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
相关资源
最近更新 更多