kafka+zookeeper安装

来源:互联网 发布:javascript字符串替换 编辑:程序博客网 时间:2024/06/11 15:19

kafka

kafka是用于构建实时数据管道和流应用程序。具有横向扩展,容错,wicked fast(变态快)等优点,并已在成千上万家公司运行。
简单说明什么是kafka

Apache kafka是消息中间件的一种,我发现很多人不知道消息中间件是什么,在开始学习之前,我这边就先简单的解释一下什么是消息中间件,只是粗略的讲解,目前kafka已经可以做更多的事情。

举个例子,生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,”鸡蛋“又丢失了,这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了,都在篮子里,而这个篮子就是”kafka“。
鸡蛋其实就是“数据流”,系统之间的交互都是通过“数据流”来传输的(就是tcp、http什么的),也称为报文,也叫“消息”。
消息队列满了,其实就是篮子满了,”鸡蛋“ 放不下了,那赶紧多放几个篮子,其实就是kafka的扩容。
各位现在知道kafka是干什么的了吧,它就是那个”篮子”。

producer:生产者,就是它来生产“鸡蛋”的。
consumer:消费者,生出的“鸡蛋”它来消费。
topic:你把它理解为标签,生产者每生产出来一个鸡蛋就贴上一个标签(topic),消费者可不是谁生产的“鸡蛋”都吃的,这样不同的生产者生产出来的“鸡蛋”,消费者就可以选择性的“吃”了。
broker:就是篮子了。

1.kafka集群是把状态保存在Zookeeper中的,首先要搭建Zookeeper集群。
zookeeper集群中主要有两个角色:leader和follower。

领导者(leader),用于负责进行投票的发起和决议,更新系统状态。学习者(learner),包括跟随者(follower)和观察者(observer)。其中follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票。而observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。zookeeper节点部署的越多,服务的可靠性也就越高。当然建议最好是部署奇数个,偶数个不是不可以。但是zookeeper集群是以宕机个数过半才会让整个集群宕机的,允许1台机器挂掉,所以奇数个集群更佳。zk集群一般只有一个leader,多个follower,主一般是相应客户端的读写请求,而从主同步数据,当主挂掉之后就会从follower里投票选举一个leader出来。下载链接:http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10

下面是三台虚拟机同时进行的操作…
2.首先创建Zookeeper项目目录
mkdir zookeeper #项目目录
进入zookeeper创建文件夹
mkdir zkdata #存放快照日志
mkdir zkdatalog#存放事物日志
3.将下载好的zookeeper放在/usr/zookeeper下
所以zookeeper路径为/usr/zookeeper/zookeeper-3.4.10
4.配置环境变量
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_144
export CLASSPATH=JAVAHOME/jre/lib/ext:JAVA_HOME/lib/tools.jar

export HADOOP_HOME=/usr/hadoopexport SPARK_HOME=/usr/sparkexport ZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.10export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$SPARK_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH

5.进入conf目录,/usr/zookeeper/zookeeper-3.4.10/conf
zoo_sample.cfg 这个文件是官方给我们的zookeeper的样板文件,给他复制一份命名为zoo.cfg,zoo.cfg是官方指定的文件命名规则

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/zookeeper/zkdata
dataLogDir=/usr/zookeeper/zkdatalog
clientPort=2181
server.1=192.168.1.99:2888:3888
server.2=192.168.1.100:2888:3888
server.3=192.168.1.101:2888:3888

tickTime:

这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

initLimit:

这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒

syncLimit:

这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是5*2000=10秒

dataDir:

快照日志的存储路径

dataLogDir:

事物日志的存储路径,如果不配置这个那么事物日志会默认存储到dataDir制定的目录,这样会严重影响zk的性能,当zk吞吐量较大的时候,产生的事物日志、快照日志太多

clientPort:

这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。修改他的端口改大点

server.1 这个1是服务器的标识也可以是其他的数字, 表示这个是第几号服务器,用来标识服务器,这个标识要写到快照目录下面myid文件里

192.168.1.99为集群里的IP地址,第一个端口是leader和flower之间的通信端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888

6.创建myid
进入/usr/zookeeper/zkdata
vi myid
编辑1
每个机器操作一遍.
server2 编辑2
server3 编辑3

7.启动服务器(三台都需要操作)
cd /usr/zookeeper/zookeeper-3.4.10/bin
./zkServer.sh start

8.检查服务器状态
./zkServer.sh status
结果显示:
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower

接下来就是kafka的安装

kafka安装:
1.进入下载页面:http://kafka.apache.org/downloads.html
2.mkdir /usr/kafka
cd /usr/kafka/
将下载好的kafka放在这个目录下,kafka目录为/usr/kafka/kafka_2.11-0.11.0.1

flush privileges; //刷新MySQL的系统权限相关表­