【发布时间】:2019-12-27 17:16:52
【问题描述】:
我是 Alpakka 的新手,正在考虑将其用于系统集成。在应用程序重新启动时维护 Akka Streams 源状态的理想方法是什么?
例如:假设我正在使用以下内容来连续读取一些输入数据并将其转储到某个地方。如果它运行了 4 小时,然后整个 JVM 崩溃并重新启动(例如 k8s 重新启动我的 pod 左右)怎么办:
someSource
.via(someTransformation)
.via(someOtherTransformation)
.toMap(...)
.run()
我了解,如果 someSource 是 Kafka 源或 Kinesis 源或其他一些有状态的源,他们可以跟踪其偏移量或检查点,并或多或少地从中断的地方重新启动。
但是,许多其他来源没有这样的概念,例如Cassandra 源、文件源或 RDBMs 源。例如,如果我关闭并重新启动rdms example中提供的代码,它每次都会从顶部重新启动。
我是否正确理解没有开箱即用的机制来解决这个问题,s.t.我们必须手动处理吗?我会想象这个功能会很受欢迎,以至于它会以某种方式处理。如果不是,人们通常如何解决这个问题?您是否使用 Akka 持久性将一些游标存储在几个演员中?或者您是否将原点偏移与输出数据一起存储并在启动时重新读取?
还是我看错了?
【问题讨论】:
标签: scala akka akka-stream alpakka