我是Alpakka的新手,正在考虑将其用于系统集成。在整个应用程序重新启动时维持Akka Streams源状态的理想方法是什么?
例如:假设我使用以下方法来连续读取一些输入数据并将其转储到某处。如果它运行了大约4小时,然后整个JVM崩溃并重新启动(例如k8s重新启动了我的Pod),该怎么办?
someSource
.via(someTransformation)
.via(someOtherTransformation)
.toMap(...)
.run()
我了解到,如果someSource
是Kafka源或Kinesis源或其他有状态源,则他们可以跟踪其偏移量或检查点,并或多或少从中断处重新开始。
但是,许多其他来源都没有这样的概念,例如Cassandra源,文件源或RDBM源。例如,如果我关闭并重新启动rdms example中提供的代码,则每次都会从顶部重新启动。
我正确地理解,没有机制可以立即解决这个问题。我们必须手动处理吗?我曾想过,此功能会如此普遍,以某种方式处理。如果没有,人们通常如何解决?您是否使用Akka持久性将一些游标存储在几个actor中?还是将原点偏移量与输出数据一起存储并在启动时重新读取?
还是我看错了这一切?
答案 0 :(得分:1)
出于您建议的原因,这是非常需要的功能。
但是,实现此目标的唯一通用,可靠的方法是使用akka持久性,它可能是Akka生态系统中最重的依赖(例如,它需要选择数据库)。除此之外,它将是特定于源的。有些工具(例如Kafka,Kinesis)可以做到这一点,几乎可以在每种情况下使用,但对于另一些情况,如何存储消费状态的细节会有所不同的意见。一般来说,Akka和Alpakka倾向于回避意见。