一、安装kafka集群:
0.选择s101 ~ s103三台主机(虚拟机)安装kafka
1.准备zk:略
2.jdk:略
3.tar文件
tar -zxvf kafka_2.11-0.10.2.1 -C /soft
4.环境变量
[/etc/profile] //记得要配置
#kafka
export KAFKA_HOME=/soft/kafka
export PATH=$PATH:$KAFKA_HOME/bin
创建符号链接:ln -s kafka_2.11-0.10.2.1 kafka
scp -r kafka_2.11-0.10.2.1 centos@s102:/soft //分发
scp -r kafka_2.11-0.10.2.1 centos@s103:/soft
注意:分发之后记得配置其他机器的环境变量
//分发符号链接
rsync -l kafka centos@s102:/soft
rsync -l kafka centos@s103:/soft
5.配置kafka
cp server.properties server.properties.bak //复制一份
[kafka/config/server.properties] //只需配置这个文件
#broker的全局唯一编号,不能重复
broker.id=202
#删除topic功能使能
delete.topic.enable=true
listeners=PLAINTEXT://:9092
#处理网络请求的线程数量
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=/home/centos/kafka/logs //kafka缓存的数据放在这里(磁盘上)
#topic在当前broker上的分区个数
num.partitions=1
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
#segment文件保留的最长时间,超时将被删除
log.retention.hours=168
#配置连接Zookeeper集群地址
zookeeper.connect=172.20.21.100:2181,172.20.21.101:2181,172.20.21.102:2181
6.分发server.properties,同时修改每个文件的broker.id
注意:broker.id不得重复
bin目录下的常用命令:
kafka-server-start.sh //启动 kafka只能一台一台启动
kafka-server-stop.sh //关闭
kafka-topics.sh //topic的创建、删除
kafka-console-consumer.sh //控制台消费者,测试时用到,生产环境不会用的
kafka-console-producer.sh //控制台生产者,测试时用到,生产环境不会用的
7.启动kafka服务器
a)先启动zk
b)启动kafka
[s101 ~ s103]
$>bin/kafka-server-start.sh -daemon config/server.properties
关闭集群[s101 ~ s103]:bin/kafka-server-stop.sh stop
c)验证kafka服务器是否启动
$>netstat -anop | grep 9092
二、Kafka命令行操作:创建topic,往topic写数据,消费topic的数据。
1.创建主题 //kafka集群(包括了topic)依赖zookeeper,将topic信息写入zookeeper中。
$>bin/kafka-topics.sh --create --zookeeper s100:2181 --replication-factor(副本数) 3 --partitions(分区数) 3 --topic first
--topic 定义topic名
--replication-factor 定义副本数
--partitions 定义分区数 //一个分区对应一个文件夹
注意:当设置的replication-factor(副本数)大于broker(机器数)时,会报错。
2.查看主题列表 //查看有几个topic
$>bin/kafka-topics.sh --list --zookeeper s100:2181
3.发送消息--启动控制台生产者--生产者连接broker
$>bin/kafka-console-producer.sh --broker-list s101:9092 --topic first
$>hello world
4.消费消息--启动控制台消费者--消费者连接zookeeper
//另一台主机
$>bin/kafka-console-consumer.sh --bootstrap-server s101:9092 --topic test --from-beginning
注意:
--from-beginning:会把test主题中以往所有的数据都读取出来。根据业务场景选择是否增加该配置。
--bootstrap-server s101:9092:新版本中,指的是kafka集群,推荐使用这个!
--zookeeper s101:2181:老版本中的,指的是zookeeper
5、查看topic详情:
$>bin/kafka-topics.sh --zookeeper hadoop102:2181 --describe --topic first
6、删除topic:
$>bin/kafka-topics.sh --zookeeper hadoop102:2181 --delete --topic first
面试题:
在kafka的高版本中,为什么将offset维护在本地,不再交给zookeeper维护?
答:低版本时,consumer从topic的leader中获取数据,进行通信,每条数据有offset,之后consumer将offset给到zookeeper。这样效率不高。高版本中将offset也放在leader中。所以为了提高效率。