欢迎光临
我们一直在努力

zookeeper 和 kafka 的安装使用

前提都安装JDK 6版本以上

java -version

java version “1.7.0_79”

测试环境集群结构(三台集群的hosts一定要互相解析 不然会很坑)

server1: 192.168.100.10

server1: 192.168.100.13

server1: 192.168.100.20

安装包:

zookeeper-3.4.9.tar.gz 

kafka_2.11-0.10.1.0.tgz 

背景:

为了获得可靠的 ZooKeeper 服务,用户应该在一个集群上部署 ZooKeeper 。只要集群上大多数的 ZooKeeper 服务启动了,那么总的 ZooKeeper 服务将是可用的。另外,最好使用奇数台机器。 如果 zookeeper 拥有 5 台机器,那么它就能处理 2 台机器的故障了。

### zookeeper的集群安装##################

1、安装包下载到/usr/local/src

2、解压至安装路径/usr/localcd 

cd /usr/local/src/

tar -xvf zookeeper-3.4.9.tar.gz   -C /usr/local/

cd /usr/local

ln -s zookeeper-3.4.9/ zookeeper

3、修改配置文件

cd  cd /usr/local/zookeeper/conf/

cp zoo_sample.cfg zoo.cfg

配置文件(每台zookeeper的配置文件都一样)

[root@master conf]# cat zoo.cfg 

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial 

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between 

# sending a request and getting an acknowledgement

syncLimit=5

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just 

# example sakes.

dataDir=/usr/local/zookeeper/data

# the port at which the clients will connect

clientPort=2181

# the maximum number of client connections.

# increase this if you need to handle more clients

#maxClientCnxns=60

#

# Be sure to read the maintenance section of the 

# administrator guide before turning on autopurge.

#

# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

#

# The number of snapshots to retain in dataDir

#autopurge.snapRetainCount=3

# Purge task interval in hours

# Set to “0” to disable auto purge feature

#autopurge.purgeInterval=1

#第一个端口( port )是从( follower )机器连接到主( leader )机器的端口

#第二个端口是用来进行 leader 选举的端口

server.1=192.168.100.10:2888:3888

server.2=192.168.100.13:2888:3888

server.3=192.168.100.20:2888:3888

### 注释:

在这个文件中,我们需要指定 dataDir 的值,它指向了一个目录,这个目录在开始的时候需要为空。下面是每个参数的含义:

tickTime :基本事件单元,以毫秒为单位。它用来指示心跳,最小的 session 过期时间为两倍的 tickTime. 。

dataDir :存储内存中数据库快照的位置,如果不设置参数,更新事务日志将被存储到默认位置。

clientPort :监听客户端连接的端口

#server.A=B:C:D  其中A是一个数字,代表这是第几号服务器;B是服务器的IP地址;C表示服务器与群集中的“领导者”交换信息的端口;当领导者失效后,D表示用来执行选举时服务器相互通信的端口。

4、创建数据目录和创建myid文件

mkdir /usr/local/zookeeper/data

echo “1” > /usr/local/zookeeper/data/myid

### 配置其他节点

myid要不一样

5、启动集群

按照上述进行配置即可。

第五步:启动ZooKeeper集群

在ZooKeeper集群的每个结点上,执行启动ZooKeeper服务的脚本,如下所示:

cd /usr/local/zookeeper/

bin/zkServer.sh start  

bin/zkServer.sh start  

bin/zkServer.sh start  

查看日志:(日志生成在执行启动的目录下)

tail -f zookeeper.out

查看监听的端口:(Leader端 才监听2888 端口,follower是不监听的,只监听3888端口)

[root@agent zookeeper]# netstat -tulnp |grep 88

tcp        0      0 ::ffff:192.168.100.13:3888  :::*                        LISTEN      18526/java          

tcp        0      0 ::ffff:192.168.100.13:2888  :::*                        LISTEN      18526/java          

[root@agent zookeeper]# netstat -tulnp |grep 2181

tcp        0      0 :::2181                     :::*                        LISTEN      18526/java          

[root@agent zookeeper]# 

6 验证

./bin/zkServer.sh  status

注释: 因为启动顺序是从第一台开始的 所以看日志第一台会有日志因为第二台第三台还未启动,一会就正常了忽略

看到各个角色(leader选举出来表示集群正常) 通过上面状态查询结果可见,第二台是集群的Leader,其余的两个结点是Follower。

[root@agent zookeeper]# ./bin/zkServer.sh  status

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

Mode: leader

7、测试客户端命令连接

./bin/zkCli.sh -server 192.168.100.10:2181

连接上去之后:

执行命令

[zk: 192.168.100.10:2181(CONNECTED) 4] ls /

[zookeeper]

注: 当前根路径为/zookeeper。

################# 安装kafka

下载包

[root@master src]# ll kafka_2.11-0.10.1.0.tgz 

-rw-r–r– 1 root root 34373824 Oct 20  2016 kafka_2.11-0.10.1.0.tgz

1、解压至安装目录

tar -xvf kafka_2.11-0.10.1.0.tgz -C /usr/local/

cd /usr/local/

ln -s kafka_2.11-0.10.1.0/ kafka

2、修改配置文件

cd /usr/local/kafka/config

vim server.properties 

需要修改的项目:

# The id of the broker. This must be set to a unique integer for each broker

broker.id=1

# A comma seperated list of directories under which to store log files

log.dirs=/usr/local/kafka/logs

# Zookeeper connection string (see zookeeper docs for details).

# This is a comma separated host:port pairs, each corresponding to a zk

zookeeper.connect=192.168.100.10:2181,192.168.100.13:2181,192.168.100.20:2181

注意:每台kafka的broer.id 是不一样的

3、创建日志目录

mkdir /usr/local/kafka/logs

4、### 配置其他节点

5、启动

从后台启动Kafka集群(3台都需要启动)

cd /usr/local/kafka/bin/
./kafka-server-start.sh -daemon  ../config/server.properties

[root@master bin]# jps

7449 Jps

7427 Kafka             #kafka进程

31341 QuorumPeerMain   #zk进程

如果(3个kafka进程都在表示正常,配置文件错误是服务起不了)

查看启动日志:

tail -f  /usr/local/kafka/logs/server.log 

6、测试kafka集群

1-进入kafka根目录,创建topic   test

./bin/kafka-topics.sh --create --zookeeper 192.168.100.10:2181,192.168.100.13:2181,192.168.100.20:2181 --replication-factor 1 --partitions 1 --topic test

结果:

Created topic “test”.

2-列出已创建的topic列表

./bin/kafka-topics.sh --list --zookeeper 192.168.100.10:2181,192.168.100.13:2181,192.168.100.20:2181

结果:

test

或者使用zookeeper命令去查看

./bin/zkCli.sh -server 192.168.100.10:2181

[zk: 192.168.100.10:2181(CONNECTED) 3] ls /brokers/topics

[test]

3-模拟客户端去发送消息

./bin/kafka-console-producer.sh –broker-list 192.168.100.10:9092,192.168.100.13:9092,192.168.100.20:9092 –topic test

4-模拟客户端去接受消息(虽然看到的是消费 但是因为消费么有删除每次 执行之前的模拟信息还会看到)

./bin/kafka-console-consumer.sh –zookeeper 192.168.100.10:2181,192.168.100.13:2181,192.168.100.20:2181 –from-beginning –topic test

5、停止 在启动(重启)

集群依次kafka都需要停止

./bin/kafka-server-stop.sh

集群依次kafka都需要启动

cd /usr/local/kafka/bin/
./kafka-server-start.sh -daemon  ../config/server.properties

6、 删除测试的test 的那个topic

./bin/kafka-topics.sh --delete --zookeeper 192.168.100.10:2181,192.168.100.13:2181,192.168.100.20:2181 --topic test

结果                             

Topic test is marked for deletion.

Note: This will have no impact if delete.topic.enable is not set to true.

因为:

如果kafaka启动时加载的配置文件中server.properties没有配置(默认没有配置 默认值为false)delete.topic.enable=true,那么此时的删除并不是真正的删除,而是把topic标记为:marked for deletion

彻底删除进入zk

./bin/zkCli.sh -server 192.168.100.10:2181

rmr /brokers/topics/test

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。