如何在应用程序重新启动期间维护Alpakka / Akka Streams源状态?

问题描述 投票:1回答:1

我是Alpakka的新手,正在考虑将其用于系统集成。在整个应用程序重新启动时维持Akka Streams源状态的理想方法是什么?

例如:假设我使用以下方法来连续读取一些输入数据并将其转储到某处。如果它运行了大约4h会导致整个JVM崩溃并重新启动(例如k8s重新启动我的Pod),该怎么办:

someSource
    .via(someTransformation)
    .via(someOtherTransformation)
    .toMap(...)
    .run()

我了解,如果someSource是Kafka源或Kinesis源或其他有状态源,他们可以跟踪其偏移量或检查点,并在中断处重新启动。

但是,其他许多来源都没有这样的概念,例如Cassandra源,文件源或RDBM源。例如,如果我关闭并重新启动rdms example中提供的代码,它将每次从顶部重新启动。

我是否正确理解,没有机制可以立即解决这个问题。我们必须手动处理吗?我曾想过,此功能会如此普遍,以某种方式处理。如果没有,人们通常如何解决?您是否使用Akka持久性将一些游标存储在几个actor中?还是将原点偏移量与输出数据一起存储并在启动时重新读取?

还是我看错了这一切?

scala akka akka-stream alpakka
1个回答
0
投票

出于您的建议,这是非常需要的功能。

但是,实现这一目标的唯一通用,可靠的方法是使用akka持久性,它可能是Akka生态系统中最重的(例如,它需要选择一个数据库)依赖项。除此之外,它将是特定于源的。有些人(例如Kafka,Kinesis)有这样做的方法,几乎​​可以在每种情况下使用,但是对于其他人,如何存储消费状态的细节会有所不同意见。一般而言,Akka和Alpakka倾向于回避意见。

© www.soinside.com 2019 - 2024. All rights reserved.