gpt4 book ai didi

具有持久邮箱的 Akka 无状态参与者

转载 作者:行者123 更新时间:2023-12-02 14:48:55 26 4
gpt4 key购买 nike

我想创建一个包含 1000 个 actors 的 Akka 集群。每个参与者都会收到一条消息,进行一些计算并将结果写入专门的 Kafka 主题。

它应该部署在集群中,例如 Kubernetes。

我的理解是——无论出于何种原因终止了 actor(JVM 崩溃、重新部署或其他任何原因),那么其邮箱的内容——连同当前正在处理的消息——都会丢失!

这对我来说是完全不能接受的,因此我想实现一种拥有持久邮箱的方法。请注意, Actor 本身是无状态的,他们不需要重播消息或重建状态。我所需要的只是在 actor 终止时不丢失消息。

问题是:推荐的方法是什么? Herehere他们建议实现持久性参与者。但是就像我说的,我不需要坚持和恢复actor的任何状态。我应该实现基于持久存储(如 SQL 数据库)的自定义邮箱吗?

我也看到之前的某个版本Akka支持“持久”邮箱,这似乎是我所需要的。但出于某种原因,他们删除了它,这令人困惑......

最佳答案

客户端 上使用持久性参与者是针对此类要求的建议。我知道你是说你的接收 Actor 不需要持久性/有状态,但是通过在客户端上使用持久性,你要么在接收 Actor 终止时重试,要么使用开箱即用的保证消息传递功能来确保它被处理.本质上,持久性(在客户端)用于持久化发出的请求,以便 客户端 可以在必要时重新发送消息以“重建邮箱”。

使用客户端持久化是:

  • 比持久邮箱性能更高
  • 防止出现更多故障情况(例如在网络层丢弃的消息、应用程序逻辑中的故障)
  • 更灵活并支持更多类型的恢复(例如:只需要恢复部分消息的场景)

这就是为什么持久邮箱从 Akka 中删除的原因:Akka 持久性/保证至少一次交付本质上是一个在所有方面都比持久邮箱更好的解决方案。

stikkos 使用 Kafka 的答案也是可行的。我只是担心引入 Kafka 会增加很多复杂性。当然,任何持久性存储都会增加复杂性,所以我想这仅取决于您已经拥有的东西。

关于具有持久邮箱的 Akka 无状态参与者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57040424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com