二、Kafka集群搭建、启动与命令行操作

一、安装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中。所以为了提高效率。

 

 

 

 

 

 

 

 

你可能感兴趣的:(kafka)