一、安装 Zookeeper
由于 Kafka 需要依赖 ZooKeeper,因此首先需要准备 ZooKeeper 环境。
1.安装配置
(1)首先我们访问 ZooKeeper 的官网(http://mirror.bit.edu.cn/apache/zookeeper/)下载合适的版本。
ZooKeeper安装并启动成功后,连接报错:
Could not find or load main class org.apache.zookeeper.ZooKeeperMain
解决方案:
3.5.x版本之后,应下载 apache-zookeeper-x.x.x-bin.tar.gz ,而不是 apache-zookeeper-x.x.x.tar.gz
下载 apache-zookeeper-3.6.1.tar.gz 版本后,虽然可以安装并启动成功,但客户端命令 ./zkCli.sh 报错。下载 apache-zookeeper-3.6.1-bin.tar.gz 就没有问题。当然也可以降低版本到3.4版本。
(2)这里我们下载 3.6.1 版本的apache-zookeeper-3.6.1-bin.tar.gz
执行如下命令解压安装包:
tar -xvf apache-zookeeper-3.6.1-bin.tar.gz
(3)接着创建 ZooKeeper 数据文件存放目录、以及日志存放目录(路径随意,后面会用到):
mkdir -p /root/zookeeper/tmp
mkdir -p /root/zookeeper/log
(4)接着进入 conf 文件夹,执行如下命令复制 zoo 文件:
cp zoo_sample.cfg zoo.cfg
(5) 编辑 zoo.cf 文件:
vim zoo.cfg
在zoo.cfg里配置数据文件目录、以及日志目录,然后保存退出。(ZooKeeper 默认端口为 2181,如果有端口冲突或者需要改用其他端口可以修改 clientPort 配置):
2.启动运行
(1)进入 bin 目录后执行如下命令启动 ZooKeeper 服务:
./zkServer.sh start
(2)启动后执行如下命令则可查看 ZooKeeper 状态:
./zkServer.sh status
(3)下面表示单机模式的 ZooKeeper 启动成功:
3.解决Zookeeper出现:
Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain问题
(1)安装maven及解压
wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -zxvf apache-maven-3.6.3-bin.tar.gz
(2)添加环境变量
vim /etc/profile
在profile中末尾加入:
export MAVEN_HOME=/usr/local/maven-3.6.3
export PATH=PATH:JAVA_HOME/bin:$MAVEN_HOME/bin
(3)重新加载环境变量
source /etc/profile
(4)查看是否安装成功
mvn -v
(5)重新编译zookeeper代码即可
cd /usr/local/zookeeper
cd /zookeeper-server
mvn package -Dmaven.test.skip=true
二、安装Kafka
1.首先我们从官网上下载安装包,地址如下:http://kafka.apache.org/downloads.html
以kafka_2.12-2.2.2为例:
wget http://mirror.bit.edu.cn/apache/kafka/2.2.2/kafka_2.12-2.2.2.tgz
2.下载执行如下命令进行解压:
tar zxvf kafka_2.12-2.2.2.tgz
3.目录信息
由于 Kafka 的设计中依赖了 ZooKeeper,所以我们在 bin 和 config 目录中除了看到 Kafka 相关的内容之外,还有 ZooKeeper 相关的内容:
bin 目录中存放了 Kafka 和 ZooKeeper 的命令行工具,bin 根目录下存放的是适用于 Linux/UNIX 的 shell,而 bin/windows 下存放的则是适用于 Windows 下的 bat。
config 目录,则用来存放关于 Kafka 与 ZooKeeper 的配置信息。
4.编辑 config 文件夹下的配置文件 server.properties,修改如下两行默认配置,使得可通过外网连接服务器 Kafka(如果不需要从外部连接,只是通过 localhost 本地连接,则不用修改):
5.最后进入 bin 目录执行如下命令启动 Kafka(启动命令需要指定 Karfka 配置文件的位置):
./kafka-server-start.sh -daemon ../config/server.properties
启动后可以通过 jps 命令检查是否启动成功,如出现图表示启动成功:
QuorumPeerMain是zookeeper集群的启动入口类,是用来加载配置启动QuorumPeer线程的。
三、执行命令
1.创建查看 Topic
(1)我们执行如下命令可以创建一个名为 test 的 Topic,该 Topic 包含一个分区和一个 Replica。
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
(2)创建后可以执行如下命令查看当前的 Topics:
./kafka-topics.sh --list --zookeeper localhost:2181
2.创建消息
(1)首先创建消息生产者。执行如下命令启动 Kafka 基于命令行的消息生产客户端,启动后可以直接在控制台中输入消息来发送,控制台中的每一行数据都会被视为一条消息来发送。
./kafka-console-producer.sh --broker-list localhost:9092 --topic test
(2)接着创建消息消费者。我们打开另一个命令窗口执行如下执行命令启动 Kafka 基于命令行的消息消费客户端,启动之后,马上可以在控制台中看到之前我们在消息生产客户端中发送的消息。(本例中另一个窗口是通过远程工具putty打开)
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
生产者:
消费者: