Kafka是一个开源的,轻量级的、分布式的、具备复制备份、基于zooKeeper协调管理的分布式消息系统。linux
它具有如下三个特性:apache
可以发布订阅流数据:windows
存储流数据时,提供相应的容错机制api
当流数据到达时,可以被及时处理。服务器
首发于我的博客网站:连接地址app
本次安装只介绍在linux环境下,windows的暂时不考虑。负载均衡
做为一个消息中间件,kafka并非一个jar包,而是一个完整的应用,因此直接取官网下载部署包.分布式
下载地址:https://kafka.apache.org/downloadssvn
这里选择:性能
下载完毕以后,可使用winSCP上传到服务器中。
也可使用wget命令,直接下载:
下载完安装包以后,把它放在/usr/local
1 tar -zxf kafka_2.11-1.1.1.tgz 2 mv kafka_2.11-1.1.1.tgz kafka
换个目录名称,kafka看起来更简洁一些。
kafka是依赖于zookeeper的,因此再启动kafka以前须要先启动zookeeper。
以前看到某书,书中说是要再去下载一个zookeeper,实际上是不必的,kafka部署包中自己就有zookeeper。
首先进入kafka目录
cd /usr/local/kakfa
启动zookeeper:
执行完命令后使用jps命令查看是否启动:
1 [root@izbp18twqnsvndjvj1mnagz kafka]# jps 2 9088 app.jar 3 25170 Jps 4 24539 QuorumPeerMain
看到有QuorumPeerMain,说明zookeeper启动成功了。
启动kafka:
固然,你也能够去掉 -daemon,这样就不会kafka占用控制台了。
仍是使用jps命令查看运行是否启动成功:
如今已经完成了helloWorld的第一步,接下来,就了解一下kafka的基本概念,进行验证。
Kafka的使用场景:
1.构建实时的数据流管道,系统和应用程序可以可靠的获取消息。
2.构建转换或响应数据流的实时流应用程序.
基本概念:
1.Kafka是以集群的方式运行在一个或多个数据中心的服务器上的
2.Kafka引入了主题的概念,它是以主题来分类消息流的
3.每一条消息都有三部分组成,键,值,时间戳。
主题就是一个分类,或者说一个集合,用来将发布到kafka的消息进行归类。
一般来讲,在Kafka中,一个主题一般有多个用户来订阅和生产消息。
在实际生产中,在Kafka中都是有多个主题的,对于每一个主题,都维护多个分区(partition)日志,以下图所示:
建立主题使用kafka-topic.sh脚本,建立单分区单副本的topic test:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
查看主题:
bin/kafka-topics.sh --list --zookeeper localhost:2181
输出结果为:
在主题中,每一个分区都是一个有序的、不可变的记录序列,并不断地附加到一个结构化的提交日志中。
分区中的记录序列都被分配了一个偏移值,该偏移量唯一地标识分区中的每一个记录。
这个偏移值能够是自增的,也能够是开发者本身指定。
在日志服务器中设置分区有如下几个好处:
首先,kafka集群容许日志消息扩展到适合的单个服务器的消息,每一个分区都会有承载它大小的服务器,一个主题有多个分区,它能够处理任意数量的数据
其次,消息是并行的,能够同时处理.
分区的分布式
在kafka集群中,日志的分区是分布在每一个主机上的,每一个主机都共享数据和共同处理数据。
每一个分区在集群中的服务器中进行复制,借此实现容错的功能。
与zookeeper相似,在集群中,总有一个主机扮演leader的角色,其余主机扮演follwers的角色。
当leader进行读和写操做时,follwers也将重复leader的操做,进行读和写。
遇到leader故障怎么办,那么其余follwers中的任意一台主机就会自动成为新的leader。
生产者,顾名思义,生产消息。生产者,选择kakfa中的某个主题某个分区进行推送消息。
为了负载均衡,也能够经过循环的方式来发送消息。
消费者一般是以组的形式存在,消费者组订阅消息,而且分发给组中的每个消费者实例。
消费者实例,能够分布在不一样的进程中,也但是不一样的机器中。
若是全部消费者都有相同的组,那么消息将会在消费者组中进行负载均衡分发。
若是全部消费者上都使用了不一样的消费者,那么每一个消息都将被广播到消费者实例。
以下图:
有两个kafka集群,这两个集群有四个分区,和两个消费者组。消费者组A有2个消费者实例,消费者组B有四个消费者实例。
一般来讲,主题(topic)都会有少许的消费者组,主题中的一个逻辑(也能够说一个业务)对应着一个消费者组。
每一个消费者组组都由许多消费者实例组成,从而保证可扩展性和容错性。
kafka只记录了全部分区的总数,并不单独记录每一个主题中分区的总数。对于大多数应该程序来讲,对分区的读写只须要根据分区的偏移值就能找到了。
Kafka可无缝支持多个生产者,无论客户端使用单个主题仍是多个主题。因此它适合从多个系统中收集数据,并以统一的格式对外提供数据。
Kafka支持多个消费者从一个单独的消息流上读取数据,并且消费者之间互不影响。这与其余队列系统不一样,其余队列系统消息一旦被一个客户端读取,其余客户端就没法读取它。
除此以外,消费者能够组成一个群组,消费组能够共享消息流,并保证整个群组对每一个给定的消息只处理一次。
消费者能够非实时的读取消息,这是由于kafka能够将消息存在磁盘中,根据设置的规则进行保存,并且每一个主题能够设置单独的保留规则。
当消费者由于处理速度慢或者忽然的流量暴增致使的没法及时的处理消息,那么就能够将消息进行持久化存储,并保证消息不会丢失。
消费者能够被关闭,可是消息被继续保留在Kafka中,消费者能够从上次中断的地方继续读取消息。
一个服务器可称为一个broker,开发时能够是一个,而后扩展成3个,小型集群,随着数据不断增加,能够扩展至上百个。
对于在线集群进行扩展,丝绝不影响系统的可用性。
在处理大数据时,Kafka能保证亚秒级别的消息延迟。
kafka是高性能,吞吐量极高的消息中间件。学习kafka须要先去学习它其中的一些概念,只有理解了这些概念,
才可以在实际生产过程当中更好的合理的使用kafka,本文是开篇,主要介绍了一些kafka的概念,下一篇主要内容是kafka的经常使用api。