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 的这些独到之处足以让你刮目相看,它不只是“另一个消息队列”。