kafka是一个高吞吐量,分布式的发布-订阅消息系统.据kafka官网介绍,当前kafka已经定位为一个分布式流式处理平台(a distributed streaming platform),他最初由linkedIn公司开发,后来成为apache项目的一部分.kafka核心模块使用scala语言开发,支持多语言(如java,C/C++,python,GO,erlang,node.js等)客户端,他以可水平扩展和具有高吞吐量等特性而被广泛使用.目前越来越多的开源分布式处理系统(如flume,apache storm,spark,flink等)支持与kafka继承.
kafka背景
随着信息技术的快速发展及互联网用户规模的急剧增长,计算机所存储的信息量正呈爆炸式增长,目前数据量已进入大规模和超大规模的海量数据时代,如何高效的存储,分析,处理和挖掘海量数据已成为技术研究领域的热点和难点问题.当出现的云存储,分布式存储系统,NOSQL数据库及列存储等前沿技术在海量数据的驱使下,正日新月异的向前发展,采用这些技术来处理大数据成为一种发展趋势.而如何采集和运营管理,分析这些数据也是大数据处理中一个至关重要的组成环节,这就需要相应的基础设施对其提供支持.针对这个需求,当前业界已有很多开源的消息系统应运而生.
kafka是一款开源的,轻量级,分布式,可分区和具有复制备份的(replicated),基于zookeeper协调管理的分布式流平台的功能强大的消息系统.与传统的消息系统相比,kafka能够很好的处理活跃的流数据,使得数据在各个子系统中高性能,低延迟的不停流转.
据kafka官方网站介绍,kafka定位就是一个分布式流处理平台,在官方看来,做为一个流式处理平台,必须具备以下3个关键特性:
能够允许发布和订阅流数据.从这个角度来讲,平台更像一个消息队列或者企业级的消息系统.
存储流数据时提供相应的容错机制
当流数据到达时能够被及时处理
kafka能够很好的满足以上3个特性,通过kafka能够很好的建立实时流式数据通道,由该通道可靠的获取系统或应用程序的数据,也可以通过kafka方便的构建实时流数据应用来转换或是对流式数据进行响应处理.特别是在0.10版本之后,kafka推出了kafka streams,这让kafka对流数据处理变得更加方便.