事件流如何提高应用程序的扩展性、可靠性和可维护性
关于事件流处理,在不同的场景中有不同的概念。有人称之为流处理,有人称之为事件溯源或CQRS,还有人称之为“复杂事件处理(Complex Event Processing)”。不管名称是什么,它们的基本原则都是一样的。Martin Kleppmann是Apache Samza的贡献者。在本文中,我们将跟随他的思路深入理解这些概念,以便帮助我们设计更好的系统。 “流处理(stream processing)”源于LinkedIn构建大规模数据系统的经验,并在开源项目Apache Kafka和Apache Samza中实现。Martin以Google Analytics为例具体介绍了这一概念。Google Analytics是一小段JavaScript代码,可以追踪哪个访问者访问了哪个网页。然后,系统管理员可以研究这些数据,并按照时间段、URL等划分这些数据。为了实现这个目的,每次用户访问一个页面时,就需要记录一个事件来反映这个事实。页面访问事件可能是(图1)这样的结构: (图1) 每个事件都是包含上述信息的一个简单不变的事实。它只简单地记录已发生的事情。然后,我们就可以从这些页面访问事件中生成图形仪表板。通常来说,这些事件可以使用(图2)所示的其中一种方式存储: 选项(a):在每个事件进来的时候将其存储,并把它们全部转存到一个大型的数据库、数据仓库或Hadoop集群中。在需要时