【问题标题】:Recreating store takes a lot of time重新创建商店需要很多时间
【发布时间】:2019-01-31 17:32:48
【问题描述】:

我正在使用 Spring Cloud Streams 使用 Kafka 流。当从主题中消耗数据时,我会进行聚合。数据最终在我定义的几个商店中。停止应用程序并重新启动时,由于商店的重新创建,应用程序需要很长时间才能准备好。知道这是否常见吗?我希望这会很快,因为商店会在应用程序之外持续存在。

问候

迈克尔

2 月 4 日更新 更清楚地说,商店在应用程序之外,在容器之外持续存在。所以这应该是它的一切吧?

【问题讨论】:

  • 我不确定您如何部署应用程序,但是,如果您重新启动实例在同一台机器上,它们应该会快速启动。只有在新节点上重新启动它们时,才需要重新创建状态,这可能需要一些时间。因此,建议不要将您的实例移动到不同的机器上。如果您在 Kubernetes 上运行,您可能希望将状态附加到您的 POD。

标签: apache-kafka-streams spring-cloud-stream


【解决方案1】:

默认情况下,状态存储数据由 Kafka 主题支持。如果 Kafka Streams 实例启动,它会查找其状态存储数据(在state.dir 定义的目录中)。如果它没有找到它,它将不得不从 Kafka 的状态存储主题中读取它。根据您拥有的数据量,这可能需要一些时间。

在容器上运行时会发生这种情况。如果您不使用卷在容器生命周期之外持久保存数据,则 Kafka Streams 应用程序实例将不得不在每次读取主题时重新创建它;因此,您可以通过将此存储与容器的生命周期分离来缩短此时间,以便在重新启动时使用它。

更新答案:是的,但请记住,如果该卷是主机中的普通卷,您会丢失它,因为在这种情况下,它不会随您的容器丢失,但它如果您的主机死机,将会丢失。为了获得额外的容错能力,您可能希望它不仅与您的容器分离,而且与您的主机分离(例如,在 AWS 术语中,外部卷 (WBS) 与实例卷)。

此外,将num.standby.replicas 设置为高于 1 会有所帮助,因此另一个实例可能会在停止实例时接管。请记住,这当然会给您的实例带来一些额外的压力。

【讨论】:

    猜你喜欢
    • 2019-12-17
    • 1970-01-01
    • 2014-04-13
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多