在2010年,职业社交网站LinkedIn面临着现有请求-响应系统的不一致性和延迟问题。为了解决这个问题,公司的软件工程师团队开发了一个优化的消息系统,能够解决他们连续数据流的问题。2010年末,LinkedIn将该项目开源。2011年7月,Apache软件基金会接受了它作为一个孵化项目,从而诞生了Apache Kafka,它后来成为了世界上最大的流媒体平台之一。
通过使用Kafka,实时数据捕获成为可能。除了Kafka,LinkedIn还创建了Samza来实时处理数据流。2013年,Apache将Samza添加到他们的项目库中。
Kafka对数据的处理方式与之前对数据的理解完全不同。尽管Kreps可能正确地表示不要过多解读工具的名字,但发现20世纪著名文学人物弗朗茨·卡夫卡的作品的哲学基础与Apache Kafka处理数据的方式有很多相似之处。
在弗朗茨·卡夫卡著名的《变形记》中,主人公格雷戈尔·萨姆沙早上醒来发现自己变成了一只巨大的昆虫。格雷戈尔·萨姆沙的身体发生了物理变化。《变形记》是一个关于主人公转变和描述生活荒谬性的故事,这在卡夫卡的大多数作品中是一个核心思想。
可能想知道这个故事如何与数据架构有任何关系?让解释一下。在Apache Kafka中,数据不是被对象化,而是被视为事件流。这些事件流以日志文件的形式记录,称为topics
。首先,日志是一个按顺序记录发生事件的文件。
例如,一个由customer_id 123
标识的客户购买了一件product_id 999
的产品。在传统的关系数据库中,quantity 1
将被记录在与客户ID和产品ID匹配的行中,反映了数据库的当前状态。假设客户改变了主意,购买了三件相同的产品。需要为这次交易变更更改数据库,将数量从1更新为3。
但是,如果将数据视为事件流,日志文件将把心意的改变作为一个特定时间发生的事实或不可变事件反映出来。在日志流中记录了quantity 1
之后,日志追加了事件。
回到格雷戈尔·萨姆沙的困境,特定时间的事件导致了他的身体转变。但他的心智仍然完好无损,他担心上班迟到。身体现实的变形是一个事件或特定时间点的事实。但它也是有状态的,也就是说,他的心智仍然像人类一样思考。
就像格雷戈尔接受身体转变没有任何惊讶或震惊一样,他的心智根据他的身体需求而变化。这对于Apache Kafka中的事件流也是如此。尽管它保留了一段时间内发生的所有事件的记忆,但可以选择删除长时间以前的日志。
多种数据源的出现改变了政府、企业和个人代理的决策过程。以前,数据就像是决策过程的验证来源;也就是说,战略决策是直觉和经验的,然后通过数据进行验证。而如今,数据驱动的决策制定是过程本身的一部分。因此,记录企业内部发生的事件。企业分析这些事件,操纵它们,并使用它们作为更多数据的输出。
考虑一个例子,一个电子商务零售商想要构建一个结账流程的应用程序,这是一个网页或应用程序,买家可以支付他们想要订购的产品。当客户在线购物并通过网页或应用程序结账时,购买消息应该反映在发货团队的数据上,以便将产品运送给购买它的客户。这不是一个复杂的过程。
现在,想象一个场景,这个事件还应该触发其他事件的系统,比如向客户发送自动电子邮件收据,更新库存数据库等。随着前端和后端服务的增加,以及对购买结账的响应列表的增长,需要构建更多的集成,这可能会变得太混乱。集成导致团队间的依赖,任何对应用程序的更改都需要团队间的协作,这使得开发变得缓慢。