ArjunNarayan、GeorgeFraser译者
王者策划
Tina
理解流式基础设施的使用和滥用,这一点很重要。
Kafka是一种消息代理,在过去几年中迅速流行起来。消息代理已经存在很长时间了,它们是一种专门用于在生产者和消费者系统之间“缓冲”消息的数据存储。Kafka已经相当流行,因为它是开源的,并且能够支持海量的消息。
消息代理通常用于解耦数据的生产者和消费者。例如,我们使用一个类似Kafka的消息代理来缓冲客户生成的Webhook,然后将它们批量加载到数据仓库中。
在这个场景中,消息代理提供了从客户发送事件到Fivetran将它们加载到数据仓库之间的事件持久存储。
但是,Kafka有时候也被描述为是一种比消息代理更大的东西。这个观点的支持者将Kafka定位为一种全新的数据管理方式,Kafka取代了关系数据库,用于保存事件的最终记录。与读写传统数据库不同,在Kafka中,先是追加事件,然后从表示当前状态的下游视图中读取数据。这种架构被看成是对“数据库的颠覆”。
原则上,以一种同时支持读和写的方式实现这个架构是有可能的。但是,在这个过程中,最终会遇到数据库管理系统几十年来遇到的所有难题。你或多或少需要在应用程序层开发一个功能齐全的DBMS,而你可能不会做得太好,毕竟一个数据库需要很多年才能做好。你需要处理脏读、幻读、写偏移等问题,还要应付匆忙实现的数据库存在的所有其他问题。
ACID困境将Kafka作为数据存储的一个最基本的问题是它没有提供隔离机制。隔离意味着在全局内,所有事务(读和写)都是沿着某些一致的历史记录发生的。Jepsen提供了一个隔离级别指南(