Apache Kafka 的过去,现在和将来


Kafka的过去,现在和将来

image

在整个 Hadoop 的生态圈里,Kafka 是一款非常特殊的软件。它由 LinkedIn 于 2011 年开源,并在 2012 年底从阿帕奇孵化器里面毕业,正式成为阿帕奇的顶级项目。

Kafka 和其他的大数据平台都不同,它的主要目的不是数据的存储或者处理,而是用来做数据交换的。要更好地理解它是干什么的,我先谈一下数据库的日志文件。

数据库系统需要保证数据的稳定性,为了确保修改的数据能够写入库,通常会在更改数据之前先在磁盘里写一条日志文件,大致上的格式是“时间戳:做了什么操作”。如果此后因为故障导致数据本身没有被更改,系统可以根据日志文件一条一条地重新执行操作,让数据恢复到应该恢复的状态。

后来有人意识到,这个日志的恢复功能还可以充当数据复制。简单来说,如果两个数据库的初始状态相同,又按照同样的顺序执行了一系列操作,那么最后的状态也相同。所以在数据库进行数据复制的时候,系统可以把日志文件从一个系统传输到另外一个系统,另外一边只要照着日志同样地执行一遍就好。

这个想法构成了大部分数据库的主从备份机制的核心,而 Kafka 则把这个机制充分发扬光大了。Kafka 允许消费者和生产者注册进 Kafka,其中生产者会产生日志,而消费者则消费产生的日志。整个系统允许多个消费者和多个生产者的注册,这就实现了公司内部不同数据源之间的数据交换。

Kafka 作为开源产品是如此之成功,在整个 Hadoop 生态圈,乃至不用 Hadoop,而是用其他数据源的产品里,它都可以用来进行数据的备份和交换。所以,我们可以看到几乎所有的互联网公司里都部署了 Kafka。

2014 年的时候,Kafka 的三个主要开发人员从 LinkedIn 出来创业,开了一家叫作 Confluent 的公司。和其他大数据公司类似,Confluent 的产品叫作 Confluent Platform。这个产品的核心是 Kafka,分为三个版本:Confluent Open Source、Confluent Enterprise 和 Confluent Cloud。

Confluent Open Source 是 Confluent 公司在 Kafka 上的一个增强版本,其主要增强的地方是:增加了一个 REST 代理,以便客户端可以使用 HTTP 连接;增加了对 Java 以外的语言的支持,比如 C++、Python 和.NET;增加了对 Hadoop 文件系统、亚马逊 S3 存储、JDBC 等的连接的支持;最重要的是一个 Schema Registry,这是对 Kafka 一个比较大的增强,它使得 Kafka 的数据流必须符合注册的 Schema,从而增强了可用性。所有这些东西本身也都是开源的,这使得其他第三方在这个上面继续开发新功能成为了可能。

Confluent Enterprise 是 Confluent 面向企业级应用的产品,里面增加了一个叫作 Confluent Control Center 的非开源产品。Confluent Control Center 是一个对整个产品进行管理的控制中心,最主要的功能对这个 Kafka 里面各个生产者和消费者的性能监控。

Kafka 作为一个非常重要的产品,已经在很多互联网企业里被作为关键组件部署了。而 Kafka 的性能监控也早就是一个非常重要的问题,Kafka 本身并不自带性能监控平台,很多公司比如雅虎自己内部开发了这样的系统。但是 Confluent 开发的控制平台无疑应该是最可靠的,毕竟没有人比 Kafka 的开发者更了解自己的产品。可惜这个是收费产品,而且不开源。Confluent Enterprise 同时还自带了数据自动负载平衡和跨数据中心数据复制的能力。

Confluent Cloud 是 Confluent Enterprise 的云端托管服务,它增加了一个叫作云端管理控制台的组件。除此之外,按照 Confluent 的说法,其实没有什么差别。但是对于想要省心的用户来说,这个产品无疑是更好的选择。

Confluent 的基本做法和 Cloudera 很像,主要的产品开源,但是控制中心这样的东西不开源,只有买了企业版才能够享受到。而两者不同的地方主要在于,Confluent 同时提供了云端服务的版本。加上 Confluent 有基于 S3 的连接,这使得从亚马逊 AWS 读写数据都非常方便。

和 Cloudera 是 Hadoop 的集成商不同,Confluent 主要还是围绕着不同数据源之间数据的交换这个任务而生的服务。Kafka 在整个开源产品里面是一个非常特殊的存在,它没有什么竞争对手,又是各大企业的刚需,它在脱离了整个 Hadoop 生态圈以后依然非常有价值。

从这个角度来讲,Confluent 毫无疑问有很多客户会买单。大部分企业都不可能只有一个数据源,当然谷歌这样的企业除外。而 Kafka 给数据源之间的数据交换提供了统一的平台,而 Confluent 的企业级服务则让这个平台不但更好用了,而且更好管理了。

虽然说是同样的生意模式,用在不同的产品里,产生的结果却可能很不一样。Confluent 作为一家公司,是否能够从 Kafka 这个数据交换平台里面跳出来继续扩张,这很难说。但是仅仅是把这一摊生意做好,也足以支撑 Confluent 成为一个估值不低的公司,养活自己应该是绰绰有余了。

Confluent 最近拿到了 5000 万美元的融资,其 CEO 在接受采访的时候表示公司还将继续扩张。像 Confluent 这样的平台,在未来物联网的架构上,还有足够多的空间,这大概表示了 Confluent 未来将重点发展的方向。