kafka安装搭建(Linux)
kafka安装
由于kafka运行需要jdk以及zookeeper的支持,所以需要先在环境里面搭建好jdk以及zookeeper
###java安装
-
0.下载jdk8
登录Oracle官网
选择对应jdk版本下载。(可在Windows下下载完成后,通过文件夹共享到Linux上) -
1.登录Linux,切换到root用户
-
su root
获取root用户权限,当前工作目录不变(需要root密码) -
sudo -i
不需要root密码直接切换成root(需要当前用户密码) -
文件——连接SFTP标签——将压缩文件拖入SFTP窗口(最方便)
-
-
2.在home目录下建立java安装目录 cd /home mkdir java
-
3.将jdk-8u60-linux-x64.tar.gz拷贝到java目录下
- cp /home/temp/linux/jdk-8u60-linux-x64.tar.gz /usr/java/
-
4.解压jdk到当前目录
-
tar -zxvf jdk-8u60-linux-x64.tar.gz
得到文件夹 jdk1.8.0_60
-
-
5.安装完毕为他建立一个链接以节省目录长度
- ln -s /usr/java/jdk1.8.0_60/ /usr/jdk(我没用这一步)
-
6.编辑配置文件,配置环境变量
vim /etc/profile
添加如下内容:JAVA_HOME根据实际目录来JAVA_HOME=/home/java/jdk1.8.0_60 CLASSPATH=$JAVA_HOME/lib/ PATH=PATH:JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH
-
7.重启机器或执行命令 :source /etc/profile
sudo shutdown -r now
-
8.查看安装情况
java -version
zookeeper安装
- 下载
-
上传解压
将刚才下载的文件,上传到Linux文件系统中。然后解压:
[root@nbu tmp]#tar -zxvf zookeeper-3.4.10.tar.gz
将解压后的文件复制到/home
目录下,并重命名为zookeeper
:
[root@nbu tmp]# cp zookeeper-3.4.10 /home/zookeeper -r //复制所有文件到zookeeper 文件夹下
[root@nbu tmp]# cd /usr/local/zookeeper //切换到/home/zookeeper目录下
-
配置
切换到
zookeeper
目录下的conf
目录下,重新复制一份zoo_sample.cfg
文件并命名为zoo.cfg
:
[root@nbu conf]# cp zoo_sample.cfg zoo.cfg //copy一份到当前目录下,并命名为zoo.cfg
修改zoo.cfg
文件如下:
[root@nbu conf]# vi zoo.cfg
dataDir=/tmp/zookeeper
前提是要创建/tmp/zookeeper
目录,不然启动时会报错。
- 最后一步配置环境变量:
[root@nbu zookeeper]# vi /etc/profile //编辑文件
[root@nbu zookeeper]# source /etc/profile //使生效
添加如下内容:
export ZOOKEEPER=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER/bin
- 启动Zookeeper
因为配置了环境变量,所以在任意目录下都可以运行以下启动命令启动Zookeeper。
[root@nbu ~]# zkServer.sh start //启动
[root@nbu ~]# zkServer.sh status //查看运行状态
启动客户端:
[root@nbu ~]# zkCli.sh //启动客户端
Zookeeper运行报错情况
1.zookeeper 集群在始终拒绝连接
需要在hosts里面注释掉127.0.0.1这一行,两个地址映射不能指向自己,该指向集群中其它机器,端口绑定的地址不是127.0.0.1所以不能用这个地址。
2.zookeeper中无法找到zoo.cfg
在运行./zkServer.sh 时候 需要指定一下后面的config 配置的zoo.cfg路径
以/home/zookeeper目录为例
./bin/zkServer.sh --config /home/zookeeper/conf start
查看状态依旧
/bin/zkServer.sh --config /home/zookeeper/con status
3.broken.id配置myid配置
# 创建 ID 文件,并把 server.x 中的 x 数字写入文件中
eg:10.172.53.144
vi /tmp/zookeeper/myid
Kafka集群部署
- 解压安装包
[root@nbu software]$ tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/module/
- 修改解压后的文件名称
[root@nbu module]$ mv kafka_2.11-0.11.0.0/ kafka
- 在/opt/module/kafka目录下创建logs文件夹
[root@nbu kafka]$ mkdir logs
- 修改配置文件
[root@nbu kafka]$ cd config/
[root@nbu config]$ vi server.properties
输入以下内容:
#broker的全局唯一编号,不能重复
broker.id=0
#删除topic功能使能
delete.topic.enable=true
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘IO的现成数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka运行日志存放的路径
log.dirs=/opt/module/kafka/logs
#topic在当前broker上的分区个数
num.partitions=1
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
#segment文件保留的最长时间,超时将被删除
log.retention.hours=168
#配置连接Zookeeper集群地址
zookeeper.connect=kafka2.sd.cn:2181,kafka3.sd.cn:2181,kafka1.sd.cn:2181
- 配置环境变量
[root@nbu module]$ sudo vi /etc/profile
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka
export PATH=PATH:KAFKA_HOME/bin
[root@nbu module]$ source /etc/profile
- 分发安装包
[root@nbu module]$ xsync kafka/
注意:分发之后记得配置其他机器的环境变量
-
分别在kafka1.sd.cn和kafka2.sd.cn上修改配置文件/opt/module/kafka/config/server.properties中的broker.id=1、broker.id=2
注:broker.id不得重复
-
启动集群
依次在kafka1.sd.cn、kafka2.sd.cn、kafka3.sd.cn节点上启动kafka
- [root@nbu kafka]$ bin/kafka-server-start.sh config/server.properties &
- 关闭集群
- [root@nbu kafka]$ bin/kafka-server-stop.sh stop
kafka运行
运行
在目录/home/kafka
下运行命令
- ./bin/kafka-server-start.sh config/server.properties &
- 其中容易出现报错,解决方法 在/tmp/kafka-logs/mate.propoties中 ,注释掉那条ID的语句
- 其中 kafka服务关闭语句为
kafka-server-stop.sh
创建topic
运行成功后进行topic的创建
-
创建 ./bin/kafka-topics.sh --create --zookeeper kafka2.sd.cn:2181 --replication-factor 3 --partitions 1 --topic test-xu
- 其中–replication-factor 指的是复制份数 一般不超过集群的个数
- –partitions 1 指分区
- –topic 命名
-
删除topic
- ./bin/kafka-topics.sh --delete --zookeeper kafka2.sd.cn:2181 --topic test
- 需要 server.properties 中设置 delete.topic.enable=true 否则只是标记删除或者直接重启
-
查看 创建的topic
- ./bin/kafka-topics.sh --describe --zookeeper kafka2.sd.cn:2181 --topic test-xu
- 创建topic之后 在/tmp/kafka-logs中 可以看到创建的topic名字
-
列出当前kafka所有的topic
- ./bin/kafka-topics.sh --zookeeper kafka2.sd.cn:2181 --list
-
修改topic(分区数、特殊配置如compact属性、数据保留时间等)
- bin/kafka-topics.sh --zookeeper nbu:2181 --alter --partitions 3 --config cleanup.policy=compact --topic test_topic
- 修改topic(也可以用这种)
- bin/kafka-configs.sh --alter --zookeeper nbu:2181 --entity-name test_topic --entity-type topics --add-config cleanup.policy=compact
- bin/kafka-configs.sh --alter --zookeeper nbu:2181 --entity-name test_topic --entity-type topics --delete-config cleanup.policy
-
删除topic
- ./bin/kafka-topics.sh --delete --zookeeper kafka2.sd.cn:2181 --topic test21
-
通过 shell 命令发送消息
- ./bin/kafka-console-producer.sh --broker-list kafka2.sd.cn:9092 --topic test-xu
-
通过 shell 消费消息
- 低版本: ./bin/kafka-console-consumer.sh --zookeeper kafka2.sd.cn:2181 --from-beginning --topic test-xu
- 最新: ./bin/kafka-console-consumer.sh --bootstrap-server kafka2.sd.cn:9092 --topic test-xu --from-beginning
- 其中 --from-begining 表示 从生产者一开始发送数据开始接收
遇到的报错
- 找不到需要连接的host,需要在server.propreties中配置好 hostname ,注意需要写入
- /tmp/meta.properties 中将id引用掉
创建topic生产消息
消费消息
删除topic