kafka安装部署

下载安装包并配置文件

可直接在官网下载对应的版本http://kafka.apache.org/downloads

下载完之后在winCP进行上传

上传到/opt/module目录下,使用 tar -zxvf kafka_2.12-3.0.0.tgz 解压到当前目录。

cd 进入目录

cd 到 config 目录 修改配置文件server.properties

broker.id=0
num.network.threads=2
num.io.threads=8
socket.send.buffer.bytes=1048576
socket.receive.buffer.bytes=1048576
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=2
log.retention.hours=168
 
log.segment.bytes=536870912
log.retention.check.interval.ms=60000
log.cleaner.enable=false
 
zookeeper.connect=hadoop1:2181,hadoop2:2181,hadoop3:2181/kafka
zookeeper.connection.timeout.ms=1000000

对比这个修改配置文件,最好一个一个对照着改,

kafka要使用集群分发所以我们要准备三台机子,不需要每台都配。配好一个使用集群分发就好了。

编写集群分发脚本
scp(secure copy)安全拷贝
1.scp 定义:

scp 可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)

2.基本语法:
scp   -r     $pdir/$fname         $user@$host:$pdir/$fname
命令 递归  要拷贝的文件路径/名称   目的地用户@主机:目的地路径/名称
3.案例实操

前提:在 hadoop102、hadoop103、hadoop104 都已经创建好的/opt/module、 /opt/software 两个目录

(a)在 hadoop1 上,将 hadoop102 中/opt/module/kafka_2.12-3.0.0 目录拷贝到hadoop103上。

[root@hadoop1 ~]# scp -r /opt/module/kafka_2.12-3.0.0/  root@hadoop3:/opt/module/

(b)也可以在 hadoop3上,将 hadoop1 中/opt/module/kafka_2.12-3.0.0 目录拷贝到hadoop3上。

[root@hadoop3 ~]# scp -r  root@hadoop1:/opt/module/kafka_2.12-3.0.0   ./

(c)还可以在 hadoop2 上操作,将 hadoop1 中/opt/modulekafka_2.12-3.0.0 目录拷贝到hadoop3上。

[root@hadoop2 ~]# scp -r  root@hadoop1:/opt/module/kafka_2.12-3.0.0   root@hadoop3:/opt/module
rsync 远程同步工具

rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsync 和 scp 区别:

用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。

1.基本语法

rsync -av $pdir/$fname $user@$host:$pdir/$fname

命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称

-a 归档拷贝

-v 显示复制过程

2.案例实操

(a)删除 hadoop2 中/opt/module/kafka_2.12-3.0.0

[root@hadoop2 module]# rm -rf kafka_2.12-3.0.0/

(b)同步 hadoop1 中的/opt/module/kafka_2.12-3.0.0 到 hadoop2

[root@hadoop1 module]# rsync -av /opt/module/kafka_2.12-3.0.0/ root@hadoop2:/opt/module/kafka_2.12-3.0.0/
xsync 集群分发脚本

由于每次同步时都要输入很多命令,还要输入密码,所以可以通过 xsync 集群分发脚本,一步到位。

下面演示xsync集群分发脚本的编写与使用

(1)需求:循环复制文件到所有节点的相同目录下

(2)需求分析:

(a)rsync 命令原始拷贝:之前hadoop1同步到hadoop2、hadoop3需要输入以下命令

[root@hadoop1 module]# rsync -av /opt/module/kafka_2.12-3.0.0/ root@hadoop2:/opt/module/kafka_2.12-3.0.0/
[root@hadoop1 module]# rsync -av /opt/module/kafka_2.12-3.0.0/ root@hadoop2:/opt/module/kafka_2.12-3.0.0/

(b)现在期望只输入以下命令就能同步到所有服务器上

[root@hadoop1 module]# xsync kafka_2.12-3.0.0/

(c)并且期望脚本xsync kafka_2.12-3.0.0/在任何路径都能使用(所以脚本需要放在声明了全局环境变量的路径下)

1.首先查看哪些目录是全局的

[root@hadoop1 module]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

2.如果不想在提供的目录下存放脚本, 可以添加一个自己的目录到全局环境中(前提是要创建好/home/hadoop/bin目录)

2.1在/etc/profile.d/my_env.sh 文件中增加 export PATH="$PATH:/home/hadoop/bin" 环境变量配置

[root@hadoop1 ~]# vim /etc/profile.d/my_env.sh
export PATH="$PATH:/home/hadoop/bin"

2.2配置完后,刷新一下环境变量

[root@hadoop1 ~]# source /etc/profile

3.再次查看时,多了一个全局目录/home/hadoop/bin

[root@hadoop1 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/home/hadoop/bin

(3)编写脚本

(a)在/home/hadoop/bin 目录下创建 xsync 文件,在该文件中编写如下代码

[root@hadoop1 bin]$ vi xsync

#!/bin/bash
#1. $#表示参数个数,判断参数个数是否小于1
if [ $# -lt 1 ]
then
 echo Not Enough Arguement!
 exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
 #打印输入的主机名
 echo ==================== $host ====================
 #3. 遍历所有目录,逐个发送
 # 例如执行命令:xsync kafka zookeeper,表示先同步kafka文件,再同步zookeeper文件
 for file in $@
 do
 #4. 判断文件是否存在
 if [ -e $file ]
 then
 #5. 获取父目录
 # 先执行cd -P /opt/module,再执行pwd,可以获取当前的父目录,-P表示软链接(P大写)
 pdir=$(cd -P $(dirname $file); pwd)
 #6. 获取当前文件的名称
 # basename /opt/module/kafka, 则当前文件名为kafka
 fname=$(basename $file)
 # ssh hadoop103可以访问hadoop103主机,并且创建目录mkdir -p /opt/module/kafka,-p表示不管目录存不存在都会创建
 ssh $host "mkdir -p $pdir"
 # rsync -av /opt/module/kafka/ root@hadoop103:/opt/module/kafka/
 rsync -av $pdir/$fname $host:$pdir
 else
 echo $file does not exists!
 fi
 done
done

(b)修改脚本 xsync 具有执行权限

[root@hadoop1 bin]# chmod 777 xsync

这样就可以使用集群分发脚本了

[root@hadoop1 kafka_2.12-3.0.0]# xsync kafka_2.12-3.0.0/

ssh hadoop2 / hadoop3 进入/opt/module目录下

查看有kafka的文件夹。

修改集群其他服务器的配置

分别在 hadoop2 和 hadoop3 上修改配置文件/opt/module/kafka_2.12-3.0.0/config/server.properties中的 broker.id=1、broker.id=2

注:broker.id 不得重复,整个集群中唯一。

[root@hadoop2 config]# vim server.properties

修改:broker.id=1

[root@hadoop3 config]# vim server.properties

修改:broker.id=2

(6)配置环境变量

1.在/etc/profile.d/my_env.sh 文件中增加 kafka 环境变量配置

[root@hadoop102 ~]# vim /etc/profile.d/my_env.sh
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka_2.12-3.0.0
export PATH=$PATH:$KAFKA_HOME/bin

2.刷新一下环境变量

[root@hadoop102 ~]# source /etc/profile

3.分发环境变量文件到其他服务器,并source /etc/profile

[root@hadoop102 ~]# xsync /etc/profile.d/my_env.sh

都刷新一下

[root@hadoop103 ~]$ source /etc/profile
[root@hadoop104 ~]$ source /etc/profile
kafka启动停止以及集群启停脚本

先启动 Zookeeper 集群,然后启动 Kafka。先配置Zookeeper集群

(1)先启动 Zookeeper 集群,然后启动 Kafka。

[root@hadoop1 kafka]$ zk.sh start

(2)依次在 hadoop1、hadoop2、hadoop3 节点上启动 Kafka

[root@hadoop1 kafka_2.12-3.0.0]# bin/kafka-server-start.sh -daemon config/server.properties
[root@hadoop2 kafka_2.12-3.0.0]# bin/kafka-server-start.sh -daemon config/server.properties
[root@hadoop3 kafka_2.12-3.0.0]# bin/kafka-server-start.sh -daemon config/server.properties

(8)kafka关闭集群

[root@hadoop1 kafka_2.12-3.0.0]$ bin/kafka-server-stop.sh 
[root@hadoop2 kafka_2.12-3.0.0]$ bin/kafka-server-stop.sh 
[root@hadoop3 kafka_2.12-3.0.0]$ bin/kafka-server-stop.sh

(9)kafka集群启停脚本

(1)在/home/hadoop/bin 目录下创建文件 kf.sh 脚本文件
[root@hadoop1 bin]$ vim kf.sh
脚本如下:
#! /bin/bash
case $1 in
"start"){
 for i in hadoop1 hadoop2 hadoop3
 do
 echo " --------启动 $i Kafka-------"
 ssh $i "/opt/module/kafka_2.12-3.0.0/bin/kafka-server-start.sh -daemon /opt/module/kafka_2.12-3.0.0/config/server.properties"
 done
};;
"stop"){
 for i in hadoop1 hadoop2 hadoop3
 do
 echo " --------停止 $i Kafka-------"
 ssh $i "/opt/module/kafka_2.12-3.0.0/bin/kafka-server-stop.sh "
 done
};;
esac
kafaka基本操作

kafka2.2+=的版本,已经不需要依赖zookeeper来查看/创建topic,新版本使用 --bootstrap-server替换老版本的 --zookeeper-server。

kafka命令行操作主要分为三大类: 主题命令行操作、生产者命令行操作、消费者命令行操作。

主题命令

查看主题命令行参数

查询命令

[root@hadoop1 ~]# /opt/module/kafka/bin/kafka-topics.sh

这个可以查询到关于主题的所有命令。

查看当前主机的所有主题(topic)
# 防止kafka宕机可以使用两台
[root@hadoop1 ~]# /opt/module/kafka/bin/kafka-topics.sh --bootstrap-server hadoop1:9092,hadoop2:9092 --list

# 测试一般使用一台即可
[root@hadoop102 ~]# /opt/module/kafka/bin/kafka-topics.sh --bootstrap-server hadoop1:9092 --list

我测试只用了一台如下,这里没有新建主题所以没有东西。

可能出现的问题如下

报错问题:kafka没有启动

产生原因:

之前设置的z的clientPort值不同导致kafka无法注册到zk上,启动后无法注册导致宕机。

zk集群的所有主机的配置文件中的配置项clientPort都要设置为一样的,zk的默认端口是2181,都设置为clientPort=2181(必须是相同的)

创建主题

a)创建一个first主题并指定分区为1,分区副本1份。

[root@hadoop1 ~]# /opt/module/kafka/bin/kafka-topics.sh --bootstrap-server hadoop1:9092 --topic first --create --partitions 1 --replication-factor 1 

b)查看所有的主题

[root@hadoop1 ~]# /opt/module/kafka/bin/kafka-topics.sh --bootstrap-server hadoop1:9092 --list

c)查看指定主题的详细信息

[root@hadoop1 ~]# /opt/module/kafka/bin/kafka-topics.sh --bootstrap-server hadoop1:9092 --topic first --describe

修改分区数

注意: 分区数只能增加,不能减少

[root@hadoop1 ~]# /opt/module/kafka/bin/kafka-topics.sh --bootstrap-server hadoop1:9092 --alter --topic first --partitions 3

查看当前分区详情

发现分区数改变

1删除主题

[root@hadoop1 ~]# /opt/module/kafka/bin/kafka-topics.sh --bootstrap-server hadoop1:9092 --delete --topic first

查看已经删除主题。

生产者与消费者命令操作
查看命令参数

查看生产者命令参数

[root@hadoop1 kafka]# bin/kafka-console-producer.sh

连接的 Kafka Broker 主机名称和端口号

参数

描述

--bootstrap-server <String: server toconnect to>

连接的 Kafka Broker 主机名称和端口号

--topic <String: topic>

操作的 topic 名称

查看消费者命令参数
[root@hadoop102 kafka]# bin/kafka-console-consumer.sh

参数

秒杀

--bootstrap-server <String: server toconnect to>

连接的 Kafka Broker 主机名称和端口号

--topic <String: topic>

操作的 topic 名称

--from-beginning

从头开始消费

--group <String: consumer group id>

指定消费者组名称

发送消息与消费消息

使用hadoop1生产消息,hadoop2消费消息。

1)生产消息

一次只能发送一条,多发送会报错,等消费者消费完可以发送之后的消息。

[root@hadoop1 kafka]# bin/kafka-console-producer.sh --bootstrap-server hadoop1:9092 --topic first

开启后需要等待,等待消费者开启

2)消费消息

消费 first 主题中的数据

注意:新创建消费者无法消费之前的历史记录,只能消费生产者新产生的记录

[root@hadoop2 kafka]# bin/kafka-console-consumer.sh --bootstrap-server hadoop1:9092 --topic first

3) 测试

生产者发送一条消息

这时消费者消费一条

当生成者消息回车时,这边会消费一条消息

4)查询消费者消费记录

把主题中所有的数据都读取出来(包括历史数据)

[root@hadoop1 kafka]# bin/kafka-console-consumer.sh --bootstrap-server hadoop1:9092 --from-beginning --topic first


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值