使用Kafka Streams构建事件溯源系统
极客时间编辑部
讲述:丁婵大小:1.36M时长:02:58
最近,在乌克兰基辅举行的 JEEConf 大会上,Wix 的软件工程师阿米泰·霍维茨(Amitay Horwitz),介绍了他的团队是如何实现一个事件溯源的发票系统,以及团队是如何使用 Kafka Streams 实现新的设计。
在设计新服务时,霍维茨和他的团队想要创建一种小规模的简单软件库,具有非侵入式的、能维护数据的完整性、易于添加客户视图等能力。为了实现这个目标,团队决定使用事件溯源架构实现服务。
在霍维茨看来,Kafka 是一种有副本的、容错的、分布式的只添加日志,经常被用于“发布者 - 订阅者”模式,或者是作为队列使用。Kafka 的基本结构为主题(Topic),它是一种分区的逻辑队列。事件溯源系统具有两个重要的关键特性,分别是使用单一分区维护消息的顺序,以及消息在被消费后得到存储。
据介绍,Kafka Streams 为 Kafka 添加了流处理的能力。它提供了两种抽象:
数据流(Streams):霍维茨认为,数据流是流动的数据,是一种无限、有序、可以重放的不可变数据序列,适用于事件源系统。
表(Tables):它是静止的数据,存储了聚合数据在某个时间点的视图,并在接收到新消息时更新。
在使用 Kafka 的发票系统新设计中,团队实现了一个快照状态存储,用于保存每个聚合的当前状态。当从命令流中接收到一个命令后,命令处理器从状态存储中读取相应聚合的当前状态。进而处理器可以决定命令状态是成功还是失败。如果命令处理成功,那么系统将会创建事件,推送到事件存储并读取新事件的数据流,然后更新状态存储中的聚合状态。
Kafka 是新架构的核心,其中微服务可以与 Kafka 通信,而且微服务之间也是通过 Kafka 通信的。系统还可以推送信息到 Kafka,或者是在创建分析报告实例时,从 Kafka 获取信息。
霍维茨表示,尽管他们已经在生产中大量地使用了 Kafka,但是新设计依然处于评估阶段。有人认为 Kafka 并不适用于 CQRS 和事件溯源系统,但是,霍维茨认为,可以在明确权衡考虑的情况下充分使用 Kafka。如果用户希望能够保存具有客户各种属性的页面浏览事件,那么就可以轻易地根据这些信息创建聚合。这样做符合事件溯源的形式,而且 Kafka 非常适用于此。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论