第1版序
这是一个激动人心的时刻,成千上万家企业正在使用Kafka,其中就包括超过三分之一的《财富》世界 500 强公司。Kafka 是成长最快的开源项目之一,它的生态系统也在蓬勃发展。Kafka 正在成为流式数据的管理和处理利器。
Kafka 从何而来?为什么要开发Kafka?Kafka 到底是什么?
Kafka 最初是 LinkedIn 的一个内部基础设施系统。我们发现,虽然有很多数据库和系统可以用来存储数据,但在我们的架构里,刚好缺一个可以处理持续数据流的组件。在开发Kafka 之前,我们实验了各种现成的解决方案,从消息系统到日志聚合系统,再到 ETL 工具,它们都无法满足需求。
最后,我们决定从头开发一个系统。我们不想只是开发能够存储数据的系统(比如传统的关系数据库、键–值存储引擎、搜索引擎或缓存系统),而是希望能够把数据看成持续变化和增长的流,并基于这样的想法构建出一个数据系统,或是一种数据架构。
这个想法的适用范围比我们最初预想的更广。Kafka 一开始被用在社交网络的实时应用程序和数据流中,现在已经成为下一代数据架构的基础。大型零售商正在基于持续数据流改造它们的基础业务流程,汽车公司正在收集和处理来自互联网汽车的实时数据流,银行也正在重新思考如何基于Kafka 改造它们的基础流程和系统。
那么,Kafka 在这当中充当了怎样的角色?它与现有的系统又有哪些区别?
我们认为Kafka 是一个流式平台:你可以在这个平台上发布和订阅数据流,并保存和处理它们,这就是构建Kafka 的初衷。以这种方式看待数据可能与人们已有的习惯有所不同,但它确实在构建应用程序和架构方面表现出了强大的抽象能力。Kafka 经常被拿来与现有的技术[比如企业级消息系统、大数据系统(如 Hadoop)和数据集成或 ETL 工具]作比较。这里的每一项比较都有一定的道理,但也有失偏颇。
Kafka 有点儿像消息系统,我们可以用它来发布和订阅消息流。从这一点来看,它和 ActiveMQ、RabbitMQ 或 IBM 的 MQSeries 等产品有些相似。尽管看上去相似,但Kafka 与这些传统消息系统之间有很多关键的不同。第一,作为现代分布式系统,Kafka 以集群的方式运行,可以自由伸缩,为公司所有的应用程序提供支撑。Kafka 集群并不是一组独立运行的 broker,而是一个可以灵活伸缩的中心平台,能够处理整个公司所有的数据流。第二,Kafka 可以按照要求存储数据,保存多久都可以。作为数据连接层,Kafka 提供了数据传递保证——可复制、持久化、保留多长时间完全由你决定。第三,流式处理将数据处理的层次提升到了新的高度。一般的消息系统只传递消息,而Kafka 的流式处理能力让你只用很少的代码就可以动态地处理派生数据流和数据集。Kafka 的这些独到之处足以让你对其刮目相看,它不只是“另一个消息队列”。
从另一个角度来看,可以把Kafka 看成实时版的 Hadoop,这也是我们设计和构建Kafka 的原始动机之一。Hadoop 可以存储并定期处理大量的数据文件,Kafka 则可以存储并处理大型的持续数据流。从技术角度来看,它们有着惊人的相似之处。很多人将新兴的流式处理看成批处理的超集,但他们忽略了很重要的一点,即持续低延迟处理系统不断开拓的应用场景与批处理系统正在失守的应用场景非常不同。Hadoop 和大数据主要应用在数据分析上,而Kafka 因其低延迟的特点更适合用在核心的业务应用上。业务事件时刻在发生,Kafka 能够及时对这些事件做出响应,基于Kafka 构建的服务可以直接为业务运营提供支撑,并提升用户体验。
Kafka 与 ETL 工具或其他数据集成工具之间也可以做一番比较。Kafka 和这些工具都擅长移动数据,但它们最大的不同在于Kafka 颠覆了传统的思维。Kafka 并非只是把数据从一个系统抽出来再塞进另一个系统那么简单,它其实是一个面向实时数据流的平台。也就是说,Kafka 不仅可以将现有的应用程序和数据系统连接起来,还能用于增强这些触发数据流的应用程序。我们认为这种以数据流为中心的架构是非常重要的。在某种程度上,这些数据流是现代数字科技公司的核心,其重要性可与它们的现金流相提并论。
兼具上述 3 个方面的能力,能够将所有的数据流整合到一起,流式处理平台因此变得极具吸引力。
当然,除了这些不同点,对那些习惯了开发请求与响应风格的应用程序和关系数据库的人来说,要学会基于持续数据流构建应用程序也着实需要一个巨大的思维转变。借助这本书来学习Kafka 再好不过了,从内部架构到 API,所有内容都由对Kafka 最了解的人亲手呈现。我希望你能够像我一样喜欢这本书。
——Jay Kreps,Kafka 核心作者、Confluent 联合创始人兼 CEO