Kafka 和 Kinesis 之间的对比和选择

在现代大型数据环境下,消息的发送和处理就变得非常重要了。

作为消息发送处理领域里面的大象,那就是 Kafka 了。

Kafka 和 Kinesis 直接的关系

在对比 Kafka 和 Kinesis 和之前,我们需要对 Kinesis 有所了解。

什么是 Kafka

Apache Kafka 是一个开源,分布式,可伸缩的发布-订阅消息系统。 负责该软件的组织是 Apache Software Foundation。 该代码是用 Scala 编写的,最初是由 LinkedIn 公司开发的。 它于2011年开源,成为 Apache 的顶级项目。

该项目旨在提供一个统一的低延迟平台,该平台能够实时处理数据馈送。 对于需要系统之间集成的不同企业基础架构,它变得越来越有价值。 希望集成的系统可以根据其需求发布或订阅特定的Kafka主题。

Kafka受事务日志的影响, Apache Kafka 背后的思想是成为可伸缩的消息队列,其结构类似于事务日志。

这个平台被指定为实时数据流。

Kafka 允许组织特定主题下的数据。

用一句话来说就是 Kafka 的消息处理能力就是快,非常的快。

什么是 Kinesis

简单来说 Kinesis 就是 AWS 的云平台的实现。

与自行部署 Kafka 来说,你不需要维护硬件平台,不需要为硬件支付费用能够非常快的进行部署。

Amazon Kinesis 可让您轻松收集、处理和分析实时流数据,以便您及时获得见解并对新信息快速做出响应。Amazon Kinesis 提供多种核心功能,可以经济高效地处理任意规模的流数据,同时具有很高的灵活性,让您可以选择最符合应用程序需求的工具。

借助 Amazon Kinesis,您可以获取视频、音频、应用程序日志和网站点击流等实时数据,也可以获取用于机器学习、分析和其他应用程序的 IoT 遥测数据。

如何选择

对有选择困难症的童鞋和公司来说也许下面的对比能够帮你做出一些决定。

主要区别

Kafka 是开源的分布式消息传递解决方案,而 Kinesis 是 Amazon提供的托管平台。

在Kafka中,您负责安装和管理集群,还负责确保高可用性,持久性和故障恢复。如果您使用的是Kinesis,则不必担心托管软件和资源。

您可以通过在本地系统中安装 Kafka 轻松学习 Kafka,而Kinesis并非如此。

Kinesis 中的定价取决于您使用的分片数量。如果您打算长时间保留邮件,则还必须支付额外的费用。

对于 Kafka,费用主要取决于您使用的 Broker 的数量。Kafka还需要一个DevOps团队进行维护,这有时成本很高。

但是,使用Kafka,只要您不耗尽存储空间,就可以将消息保留更长时间,而无需支付额外费用。

尽管 Kafka 和 Kinesis 都由生产者组成,但 Kafka 生产者将消息写入主题,而 Kinesis 生产者将数据写入 KDS。

Kinesis 还对消息的大小和消息的消耗率施加了某些限制。

Kinesis 中的最大消息大小为 1 MB,而 Kafka 消息大小可以更大。

在 Kinesis 中,您每秒可以消耗5次,每个分片最多可以消耗 2 MB,从而每秒只能写入1000条记录。

Kafka 并未施加任何隐式限制,因此费率由底层硬件决定,甚至你可以做到无限制的快速数据写入。

在安全性方面,Kafka 提供了许多客户端安全功能,例如数据加密,客户端身份验证和客户端授权,而Kinesis 通过 AWS KMS 主密钥提供服务器端加密,以加密存储在数据流中的数据。

服务器端加密的话,则很难执行客户端加密。

服务器端加密在客户端加密的基础上提供了第二层安全性。

考虑因素

看了上面那么多是不是还是有点困惑?

其实离开数据量谈方案都是耍流氓。

简单点就是 Kinesis 上手很快,如果你没有什么技术力量,在 AWS 的控制台中点一点就可以用了。

Kafka 的部署是有成本和曲线的,首先就是 Kafka 依赖 ZooKeeper 来运行,ZooKeeper 的最低运行环境都需要 3 台服务器,如果需要扩展的话那么就需要 5 台服务器,因为 ZooKeeper 为了保持高可用性,需要的是奇数台服务器的。

如果你的 ZooKeeper 部署 4 台服务器,那么 ZooKeeper 的运行效果和 3 台是一样的。

这里就导致会有使用和学习成本了。

如果你在可遇见的周期,一天就几万条消息,手上也没几个技术员,那么随便用哪个都差不多,可能用 Kinesis 还方便点,上手更快。

如果你一分钟就就万条消息的话,你还是可以考虑 Kafka 吧,因为随着消息了的增加,Kinesis 并不便宜,同时消息的保留时间是有限制的。

Kafka 的扩展是完全可以通过扩展底层硬件来实现的,同时还有维护成本在里面。