Ubuntu16.04安装配置zookeeper和kafka

发布于 2020-11-24  742 次阅读


环境说明:

  • os:Ubuntu 16.04
  • zookeeper:zookeeper 3.4.10
  • kafka:kafka_2.12-2.6.0
  • jdk:jdk 8(kafka启动需要使用到jdk)

详细说明(以下所有操作均是在root用户下操作):

一、jdk安装

dk分为以下几种:jre、openjdk、 oracle jdk,这里我们要安装的是oracle jdk(推荐安装)

apt-get update
apt-get install oracle-java8-installer
apt-get install oracle-java8-set-default

二、安装配置zookeeper单机模式

下载zookeeper3.4.10

cd /usr/local
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

下载成功后解压

tar zxvf zookeeper-3.4.10.tar.gz

解压后同目录下便存在相同文件夹

切换到conf目录下:

重命名zoo_sample.cfg到zoo.cfg:

mv zoo_sample.cfg zoo.cfg

编辑zoo.cfg如下

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/var/log/zookeeper/logs
clientPort=2181

为zookeeper创建环境变量,打开/etc/profile文件,并在最末尾添加如下内容:

export ZOOKEEPER_HOME=/usr/local/zookeeper

export PATH=${JAVA_HOME}/bin:${JMETER_HOME}/bin:${ZOOKEEPER_HOME}/bin:${KAFKA_HOME}/bin:$PATH

  1. #保存退出
  2. source /etc/profile

启动zookeeper服务:
zkServer.sh  /usr/local/zookeeper/conf/zoo.cfg

配置成开机自启动

  1. cd /etc/systemd/system
  2. touch zookeeper.service
  3. systemctl daemon-reload #系统重新加载服务
  4. systemctl enable zookeeper.service #设置开机自启动

zookeeper.service文件内容

[Unit]
# Zookeeper服务的描述
Description=Zookeeper Service
# 服务依赖—在什么服务之后启动,一般为在网络服务启动后启动
After=network.target

[Service]
# 服务类型—如果是shell脚本的方式,则Type=forking,否则不指定作何值(也就是去掉该配置项) 
Type=forking
# 启动环境参数
# 此脚本指定了Zookeeper日志和Java的目录
Environment=ZOO_LOG_DIR=/var/log/zookeeper/logs/
Environment=JAVA_HOME=/usr/lib/jvm/jdk1.8.0_211
# 启动命令
ExecStart=/usr/local/zookeeper/bin/zkServer.sh start
# 停止命令
ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop
# 重启命令
ExecReload=/usr/local/zookeeper/bin/zkServer.sh restart

[Install]
WantedBy=multi-user.target

配置中JAVA_HOME 的位置根据自己安装jdk的位置

启动命令:systemctl start zookeeper.service

停止命令:systemctl stop zookeeper.service

重启命令:systemctl restart zookeeper.service

查看状态命令:systemctl status zookeeper.service

三、安装配置kafka单机模式

下载kafaka

cd /usr/local
wget http://archive.apache.org/dist/kafka/2.6.0/kafka_2.12-2.6.0.tgz

解压:

tar zxvf kafka_2.12-2.6.0.tgz

进入kafka/config目录下:

以上文件是需要修改的文件,下面一个个修改配置:

配置server.properties:

以下为修改的,其他为默认即可:

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

配置zookeeper.properties:

#数据目录
dataDir=/var/log/kafka/zookeeper/data
#客户端端口
clientPort=2181
host.name=localhost

配置producer.properties:

zookeeper.connect=localhost:2181

配置consumer.properties:

zookeeper.connect=localhost:2181

设置开机启动

  1. cd /etc/systemd/system/
  2. touch kafka.service
  3. systemctl daemon-reload #系统重新加载服务
  4. systemctl enable kafka.service #设置开机自启动

kafka.service内容

[Unit]
# Kafka服务的描述
Description=Kafka Service
# 服务依赖—在什么服务之后启动,一般为在网络服务启动后启动
After=network.target zookeeper.service


[Service]
Type=forking
# 启动环境参数
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/jdk1.8.0_211/bin"
User=root
Group=root

# 启动命令
ExecStart=/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
# 停止命令
ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target

配置中JAVA_HOME 的位置根据自己安装jdk的位置

启动kafka命令:systemctl start kafka

关闭kafka命令:systemctl stop kafka

查看状态命令:systemctl status kafka

四、测试

创建topic

使用 kafka-topics.sh 创建单分区单副本的 topic test

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

查看 topic 列表

bin/kafka-topics.sh --list --zookeeper localhost:2181

产生消息,创建消息生产者

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

消费消息,创建消息消费者

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

查看Topic消息

bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test

第一行给出了所有分区的摘要,每个附加行给出了关于一个分区的信息。 由于我们只有一个分区,所以只有一行。
    “Leader”: 是负责给定分区的所有读取和写入的节点。 每个节点将成为分区随机选择部分的领导者。
    “Replicas”: 是复制此分区日志的节点列表,无论它们是否是领导者,或者即使他们当前处于活动状态。
    “Isr”: 是一组“同步”副本。这是复制品列表的子集,当前活着并被引导到领导者。


一名测试工作者,专注接口测试、自动化测试、性能测试、Python技术。