重建商店需要很多时间

时间:2019-01-31 17:32:49

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

我正在使用春季云流的Kafka流。从某个主题消耗数据时,我会进行汇总。数据最终存储在我定义的几个存储中。停止应用程序并重新启动时,由于商店的恢复,需要花费相当长的时间才能使应用程序准备就绪。知道这是否常见吗?我希望这会很快,因为商店将持续存在于应用程序之外。

致谢

迈克尔

更新2月4日 更清楚地说,商店在应用程序外部,容器外部持久存在。因此,这应该是对的所有内容了吗?

1 个答案:

答案 0 :(得分:1)

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

容器上运行时,这样的一个例子发生。如果你不使用卷持续超过你的容器的寿命数据,卡夫卡Streams应用程序实例将拥有从每次的主题阅读时间来重新创建;因此您可以通过从容器的使用寿命中分离此存储空间来缩短此时间,以便在重新启动时可以使用。

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

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