百万年薪架构师告诉你:什么kafka?为何选择kafka?

1. 什么是kafka?

Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被普遍使用。目前愈来愈多的开源分布式处理系统如Storm,Spark,Flink都支持与Kafka集成。如今咱们的数据实时处理平台也使用到了kafka。如今它已被多家不一样类型的公司做为多种类型的数据管道和消息系统使用。安全

2. 为何使用消息系统?

上面咱们提到kafka是一个分布式的消息系统。那为何要在咱们的数据处理平台中使用这样的一个消息系统呢?消息系统能给咱们带来什么样的好处呢?网络

(1) 解耦分布式

在项目启动之初来预测未来项目会碰到什么需求,是极其困难的。消息系统在处理过程当中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这容许你独立的扩展或修改两边的处理过程,只要确保它们遵照一样的接口约束。性能

(2) 冗余学习

有些状况下,处理数据的过程会失败。除非数据被持久化,不然将形成丢失。消息队列把数据进行持久化直到它们已经被彻底处理,经过这一方式规避了数据丢失风险。许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除以前,须要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。测试

(3) 扩展性优化

由于消息队列解耦了你的处理过程,因此增大消息入队和处理的频率是很容易的,只要另外增长处理过程便可。不须要改变代码、不须要调节参数。扩展就像调大电力按钮同样简单。spa

(4) 灵活性 & 峰值处理能力线程

在访问量剧增的状况下,应用仍然须要继续发挥做用,可是这样的突发流量并不常见;若是为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列可以使关键组件顶住突发的访问压力,而不会由于突发的超负荷的请求而彻底崩溃。代理

(5) 顺序保证

在大多使用场景下,数据处理的顺序都很重要。大部分消息队列原本就是排序的,而且能保证数据会按照特定的顺序来处理。Kafka保证一个Partition内的消息的有序性。

(6) 缓冲

在任何重要的系统中,都会有须要不一样的处理时间的元素。例如,加载一张图片比应用过滤器花费更少的时间。消息队列经过一个缓冲层来帮助任务最高效率的执行———写入队列的处理会尽量的快速。该缓冲有助于控制和优化数据流通过系统的速度。

3. 为何是kafka?

上面咱们知道咱们有必要在数据处理系统中使用一个消息系统,可是咱们为何必定要选kafka呢?如今的消息系统可不仅有kafka,俗话说得好,货比三家,咱们看一下kafka与其余消息系统的区别。

LinkedIn团队作了个实验研究,对比Kafka与Apache ActiveMQ V5.4和RabbitMQ V2.4的性能。LinkedIn在两台Linux机器上运行他们的实验,每台机器的配置为8核2GHz、16GB内存,6个磁盘使用RAID10。两台机器经过1GB网络链接。一台机器做为代理,另外一台做为生产者或者消费者。

3.1 生产者测试

对每一个系统,运行一个生产者,总共发布1000万条消息,每条消息200字节。Kafka生产者以1和50批量方式发送消息。ActiveMQ和RabbitMQ彷佛没有简单的办法来批量发送消息,LinkedIn假定它的批量值为1。结果以下图所示:

Kafka性能要好不少的主要缘由包括:

(1) Kafka不等待代理的确认,以代理能处理的最快速度发送消息。

(2)Kafka有更高效的存储格式。平均而言,Kafka每条消息有9字节的开销,而ActiveMQ有144字节。其缘由是JMS所需的沉重消息头,以及维护各类索引结构的开销。LinkedIn注意到ActiveMQ一个最忙的线程大部分时间都在存取B-Tree以维护消息元数据和状态。

3.2 消费者测试

为了作消费者测试,LinkedIn使用一个消费者获取总共1000万条消息。LinkedIn让全部系统每次拉请求都预获取大约相同数量的数据,最多1000条消息或者200KB。对ActiveMQ和RabbitMQ,LinkedIn设置消费者确认模型为自动。结果以下图所示:

Kafka性能要好不少的主要缘由包括:

(1) Kafka有更高效的存储格式;在Kafka中,从代理传输到消费者的字节更少。

(2) ActiveMQ和RabbitMQ两个容器中的代理必须维护每一个消息的传输状态。LinkedIn团队注意到其中一个ActiveMQ线程在测试过程当中,一直在将KahaDB页写入磁盘。与此相反,Kafka代理没有磁盘写入动做。最后,Kafka经过使用sendfile API下降了传输开销。

因为篇幅限制,小编在这里就不作过多的介绍了,须要更多技术文档的小伙伴,能够转发此文让更多的人学习到,而且关注一下小编由于之后还会持续更新,最后后台私信“资料”来获取更多的资料吧~~

相关文章
相关标签/搜索