与Kafka合作的scala事件资源

7tofc5zh  于 2021-06-07  发布在  Kafka
关注(0)|答案(0)|浏览(184)

对于微服务,我需要保持状态(更改)的功能。基本上,会发生以下情况:

case class Item(i: Int)
val item1 = Item(0)
val item2 = exec(item1)

哪里 exec 是用户定义的,因此事先不知道。作为一个示例,让我们假设以下实现:

def exec(item: Item) = item.copy(i = item.i + 1)

每次呼叫后 exec ,我要记录状态更改(此处: item.i: 0->1 )所以。。。
有一个历史记录(例如元组列表,如 (timestamp, what has changed, old value, new value) )
状态更改和快照可以有效地持久化到本地文件系统并发送到日志
可以从日志/快照还原任意使用者(而不仅仅是发起更改的特定生产者)
尽可能减少对库和基础设施的依赖性(这是一个小项目,不可能安装和维护复杂的基础设施/服务器)
我知道eventstoredb可能是最好的解决方案,但是,在给定的环境中(一个拥有很多策略的大型企业),我不可能安装和运行它。唯一的基础设施选择是rdbms或kafka。我想用Kafka,因为它似乎是自然适合在这个事件采购用例。
我还注意到,akka持久性似乎能够很好地处理所有的需求。但我有几个问题:
我错过了什么选择吗?
akkapersistence的kafka集成只能通过一个没有定期维护的社区插件来实现。在我看来,这不是一个常见的用例。有没有什么原因导致这种架构没有得到广泛的推广?
克隆有可能吗?在akka文件中,它说:
因此,如果两个不同的实体共享相同的persistenceid,则消息重播行为已损坏
假设两个应用程序示例, one 以及 two ,两者都有其独特之处 persistenceId s。可能 two 从…还原(克隆) one 的日记?即使他们不共享同一个id(这是不允许的)?
这种架构有完整的例子吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题