It has been 1187 days since the last update, the content of the article may be outdated.

ubuntu14.04 单机安装配置 zookeeper 和 kafka

为了方便以后扩展分布式的需要,运用 Apache Kafka 这个分布式消息发布订阅系统。Apache kafka 的详细介绍详见官网
运行 Apache Kafka,需要先安装好 jdk 和 zookeeper。jdk 安装过程就不赘述了。

1. 安装配置 zookeeper 单机模式

这里,我们选择的是 zookeeper-3.4.5 这个版本,官网下载 zookeeper-3.4.5。
下载之后将 zookeeper-3.4.5.tar.gz 移动到主文件夹并重命名:
1 mv Downloads/zookeeper-3.4.5.tar.gz zookeeper.tar.gz
然后解压缩为 zookeeper 文件夹:
2 tar -zxvf zookeeper.tar.gz
切换到 zookeeper/conf 目录:
3 cd /home/young/zookeeper/conf
复制 zoo_simple.cfg 为 zoo.cfg:
4 cp zoo_simple.cfg zoo.cfg
打开 zoo.cfg 并修改内容如下:

javascript
1
2
3
4
initLimit=10
syncLimit=5
dataDir=/home/young/zookeeper/data
clientPort=2181

配置好后,手动创建 dataDir 目录: mkdir /home/young/zookeeper/data
为 zookeeper 配置环境变量,打开 /etc/profile,在结尾添加如下两句,并保存:
javascript
1
2
export ZOOKEEPER_HOME=/home/young/zookeeper
export PATH=.:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH

切换到 zookeeper/bin 目录: cd /home/young/zookeeper/bin
启动 zookeeper 的 server: ./zkServer.sh start
显示效果如下,则证明 zookeeper 配置成功:
JMX enabled by default
Using config: /home/young/zookeeper/bin/zookeeper/conf/zoo.cfg
Starting zookeeper … STARTED
需要结束服务时,仍在本目录下,执行如下命令即可: ./zkServer.sh stop

2. 安装配置 kafka 单机模式

我们选择的是 kafka_2.10-0.8.1.1.tgz,下载链接在这里:Apache kafka。下载之后放到主文件夹,并改名为 kafka.tgz,然后解压缩到当前文件夹: tar -zxvf kafka.tgz
切换到 kafka/config 目录: cd /home/young/kafka/config
这里,我们需要修改 4 个配置文件:
server.properties,zookeeper.properties,producer.properties,consumer.properties。

2.1 配置 server.properties

下面几项是必须修改的,其他项目为默认配置:

javascript
1
2
3
4
5
6
7
8
9
10
#broker.id需改成正整数,单机为1就好
broker.id=1
#指定端口号
port=9092
#localhost这一项还有其他要修改,详细见下面说明
host.name=localhost
#指定kafka的日志目录
log.dirs=/home/young/kafka/kafka-logs
#连接zookeeper配置项,这里指定的是单机,所以只需要配置localhost,若是实际生产环境,需要在这里添加其他ip地址和端口号
zookeeper.connect=localhost:2181

然后手动创建 log.dirs 空目录: mkdir /home/young/kafka/kafka-logs

2.2 配置 zookeeper.properties

很简单,这个文件暂时只需要修改 3 项:

javascript
1
2
3
4
5
#数据目录
dataDir=/home/young/kafka/zookeeper/data
#客户端端口
clientPort=2181
host.name=localhost

然后手动创建 dataDir 空目录: mkdir /home/young/kafka/zookeeper/data

2.3 配置 producer.properties

只需要指定一项:

javascript
1
metadata.broker.list=localhost:9092

2.4 配置 consumer.properties

只需要指定一项:

javascript
1
zookeeper.connect=localhost:2181

2.5 补充说明

对于这个版本的 kafka,在配置好以上 4 项之后,仍然需要做 2 件事:
・配置 localhost,修改 /etc/hosts 文件
我的 hosts 文件里面,localhost 部分是如下配置:

javascript
1
2
3
4
5
6
127.0.0.1   localhost
#下面这句,你的计算机名是什么就填什么,我的是young
127.0.0.1 young
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost

这里如果不修改不添加,就会产生异常 java.net.UnknownHostException。
添加 slf4j-simple-1.7.2.jar
这里是个 bug,/home/young/kafka/libs 这个目录缺少 slf4j-simple-1.7.2.jar 这个文件,
只有 slf4j-api-1.7.2.jar 这个文件是不够的,必须两个都有。或者可以下载其他版本的两个 slf4j 文件,放入本目录。slf4j-simple-1.7.2.jar 可以去官网下载 slf4j-1.7.2.tar.gz,下载后解压缩,就可以看到这两个文件了。
如果这两个文件不全,就会有错误:
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

环境安装配置部分到此结束,下面介绍简单使用。

3.kafka 的使用

3.1 启动 zookeeper 服务

切换至 /home/young/kafka 目录,执行以下命令,以启动 zookeeper 服务:
bin/zookeeper-server-start.sh config/zookeeper.properties

3.2 启动 kafka 服务

仍在 /home/young/kafka 目录下,执行以下命令,以启动 kafka 服务:
bin/kafka-server-start.sh config/server.properties
对于这种启动之后就可以忽略的服务,可以在最前面加上 nohup,让其在后台自己运行。

3.3 创建话题 topic

新开一个命令行窗口,创建一个叫做 testkafka 的 topic:
bin/kafka-topics.sh —create —zookeeper localhost:2181 —replication-factor 1 —partitions 1 —topic testkafka
然后可以根据地址和端口号将话题 topic 展示出来:
bin/kafka-topics.sh —list —zookeeper localhost:2181
显示如下:
testkafka

3.4 启动生产者 producer

再开一个 producer 命令行窗口,执行以下命令:
bin/kafka-console-producer.sh —broker-list localhost:9092 —topic testkafka
然后可以之间在本窗口输入消息,每遇到换行符就认为是一条消息输入完成。
Hello kafka !

3.5 启动消费者 consumer

再新开一个 consumer 命令行窗口,执行以下命令:
bin/kafka-console-consumer.sh —zookeeper localhost:2181 —topic testkafka —from-beginning
显示如下:
Hello kafka !
这时候,启动 kafka 服务的命令行就会有显示:
[2016-06-07 14:19:12,683] INFO Closing socket connection to /127.0.0.1. (kafka.network.Processor)

然后,每在 producer 那里输入一条,consumer 这里就会显示一条,然后 kafka 服务那里也会产生日志记录。
在以后启动时,只需要依次启动 kafka server,producer,consumer 就可以了。