kafka有三种部署方式,分别为单机模式、伪集群模式、集群模式。
其中单机模式比较简单,自行查找;伪集群模式和集群模式基本一样,区别就是前者都在一台电脑上,后者在不同的电脑上。
下面以生产环境一般用的集群方式部署为例说明,按最小要求3台节点来介绍集群部署方式。本样例是在3台虚拟机下部署的,每个节点安装Centos7核心版(不带GUI)
3台机器分别规划如下:
hdp1:10.10.10.110
hdp2:10.10.10.112
hdp3:10.10.10.113
下面从如下几个方面介绍下其部署及应用:
相关配置
安装
固定配置
分发程序
修改配置
启动
查看状态
基本操作
相关配置
挂载windows目录、 IP配置、hosts名称配置、关闭防火墙、SSH配置, 需要3台电脑网络互通且能相互SSH登录,jdk安装等
具体操作参见:
Linux系列——挂载Windows虚拟文件夹到Linux系统
安装
先在其中任意一台上面安装。
1、需要先搭建好Zookeeper集群
2、下载kafka,直接解压就可以用。例如:kafka-2.13.tar.gz
下载地址
https://kafka.apache.org/downloads.html
3、解压到目标目录
$ cp /mnt/hdfs/vf/kafka-2.13.tar /usr/proc/kafka 从挂载目录将安装文件拷贝到目标路径
$ cd /usr/proc/kafka 这里切换到zk安装目录(每台机器都要新建该目录,配好一台后后面两台直接用scp命令分发,具体路径可以自定义,推荐放在/usr下)
$ tar -zxvf kafka-2.13.tar (解压后记着删除压缩文件)
固定配置
修改server.properties文件,位于/usr/proc/kafka/config下,主要修改下面两个配置:
#kafka运行消息存放的路径,需要新建该路径(每台),一般建议将日志或数据目录和程序目录分开。
#Kafka 把所有消息都保存在磁盘上,存放这些消息片段的目录是通过 log.dirs 指定的。它是一组用逗号分隔的本地文件系统路径。如果指定了多个路径,那么 broker 会根据“最少使用”原则,把同一个分区的日志片段保存到同一个路径下。
#要注意,broker 会往拥有最少数目分区的路径新增分区,而不是往拥有最小磁盘空间的路径新增分区
log.dirs=/usr/data/kafka/logs
#配置连接Zookeeper集群地址,由于本测试环境Zookeeper与kafka都使用同样的三台计算机,其中hdpX可以换成对应的IP
zookeeper.connect=hdp1:2181,hdp1:2181,hdp1:2181
分发程序
scp -r /usr/proc/kafka root@hdp2:/usr/proc/kafka 分发到hdp2
scp -r /usr/proc/kafka root@hdp2:/usr/proc/kafka 分发到hdp3
修改配置
每个节点上有些配置项是不一样的,主要有环境变量和server.properties文件
配置环境变量:
命令:vi /root/.bash_profile
加入下面内容:
export KAFKA_HOME=/usr/proc/kafka
export PATH=$PATH:$KAFKA_HOME/bin
使设置立即生效:
source /root/.bash_profile
修改server.properties文件:
#broker的全局唯一编号,不能重复,本环境下分别为:0、1、2
broker.id=0
#broker监听ip和端口,可以用IP或host名字, 例如:10.10.10.110或hdp1,本环境下分别为:10.10.10.110(hdp1)、10.10.10.112(hdp2)、10.10.10.113(hdp3)
listeners=PLAINTEXT://10.10.10.110:9092
启动
1、分别启动3台机器上的ZooKeeper进程
$ cd /usr/proc/zk/apache-zookeeper-3.5.9-bin/ 切换到进程目录
$ ./zkServer.sh start
2、分别启动3台机器上的kafka进程
$ cd /usr/proc/kafka/kafka-2.13/ 切换到进程目录
$ ./bin/kafka-server-start.sh -daemon config/server.properties & (“&” 号, 可以使程序在后台运行)
在启动时若报错可根据提示信息进行排错处理,第一次安装时会遇到如下常见问题:
1、由于开着防火墙导致不能相互通信,需要关闭防火墙, 用命令 systemctl stop firewalld 进行关闭防火墙
查看状态
Zookeeper状态:
在3台机器都正确启动ZooKeeper进程后,进行查看状态,
$ cd /usr/proc/zk/apache-zookeeper-3.5.9-bin/ 切换到进程目录
$ ./zkServer.sh status
3台机器的状态,其中有一台是:leader,另外2台是:follower
kafka状态:
在3台机器都正确启动kafka进程后,进行查看状态,
$ jps
执jps后,可以在列表看到Kafka进程,说明启动正常。
基本操作
一些常规管理,推荐使用kafka-manager工具(https://github.com/yahoo/kafka-manager),下面罗列一些基本操作命令:
1)、启动kafka服务
./bin/kafka-server-start.sh -daemon config/server.properties &
2)、可以使用命令:netstat -anlpt | grep 9092 或者 lsof -i:9092 来查看9092端口占用情况;
3)、停止kafka服务
./kafka-server-stop.sh
4)、查看所有的话题
./kafka-topics.sh --list --zookeeper localhost:9092
5)、查看所有话题的详细信息
./kafka-topics.sh --zookeeper localhost:2181 --describe
6)、列出指定话题的详细信息
./kafka-topics.sh --zookeeper localhost:2181 --describe --topic demo
7)、删除一个话题
./kafka-topics.sh --zookeeper localhost:2181 --delete --topic test
8)、创建一个叫test的话题,有两个分区,每个分区3个副本
./kafka-topics.sh --zookeeper localhost:2181 --create --topic test --replication-factor 3 --partitions 2
9)、测试kafka发送和接收消息(启动两个终端)
#发送消息(注意端口号为配置文件里面的端口号
./kafka-console-producer.sh --broker-list localhost:9092 --topic test#消费消息(可能端口号与配置文件保持一致,或与发送端口保持一致)
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning #加了--from-beginning 重头消费所有的消息
10)、查看某个topic对应的消息数量
./kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic test --time -1
11)、显示所有消费者
./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
12)、获取正在消费的topic(console-consumer-63307)的group的offset
./kafka-consumer-groups.sh --describe --group console-consumer-63307 --bootstrap-server localhost:9092
13)、显示消费者
./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list