林枫_Yang

导航

kafka集群搭建

kafka相关术语

Producer: 消息生产者,就是向kafka broker发消息的客户端

Consumer: 消息消费者,向kafka broker取消息的客户端

Consumer Group(简称"CG"):消费者组

Broker:一台kafka服务器就是一个broker,一个集群由多个broker组成,一个broker可以容纳多个topic

Topic: 可以理解为一个队列,生产者和消费者面向的就是一个topic

Parition: 为了实现扩展性,一个非常大的topic可以分不到多个broker(即服务器)上,一个topic可以分为多个pairtition,每个partition是一个有序的队列。

Replica: 副本,为保证集群中的某个节点发生故障时,该节点上的partition数据不丢失,且kafka仍然能够继续工作,kafka提供了副本机制,一个topic的每个分区都有若干个副本,一个leader和若干个follower。

Leader: 每个分区多个副本为"主",生产者发送数据的对象,以及消费者消费数据的对象都是leader。

Follower: 每个分区多个副本中的"从",实时从leader中同步数据,保持和leader数据的同步。leader发生故障时,某个follower会成为新的leader。

 

部署kafka环境

1>:下载Kafka软件并解压到指定目录

下载略

环境变量写到/etc/profild.d/下面

export KAFKA_HOME=/oldboyedu/softwares/kafka
export PATH=$PATH:$KAFKA_HOME/bin

2>:创建符号连接并配置环境变量

创建软连接略 

修改配置文件:/oldboyedu/softwares/kafka/config/server.properties 

...
broker.id=101
log.dirs=/oldboyedu/data/kafka-3.0.0
zookeeper.connect=10.0.0.102:2181,10.0.0.103:2181,10.0.0.104:2181/oldboyedu-kafka-3.0.0

 

3>:启动kafka节点

kafka-server-start.sh -daemon     /oldboyedu/softwares/kafka/config/server.properties

 

 

 

 


topic管理:
1.查看topic信息
kafka-topics.sh --bootstrap-server 10.0.0.105:9092 --list

2.创建topic
kafka-topics.sh --bootstrap-server 10.0.0.105:9092 --create --topic linux79 --partitions 3 --replication-factor 2


3.查看topic的详细信息
kafka-topics.sh --bootstrap-server 10.0.0.105:9092 --describe
kafka-topics.sh --bootstrap-server 10.0.0.105:9092 --describe --topic linux79


4.修改topic的分区数量
kafka-topics.sh --bootstrap-server 10.0.0.105:9092 --alter --topic linux79 --partitions 4
kafka-topics.sh --bootstrap-server 10.0.0.105:9092 --alter --topic linux79 --partitions 10


5.topic的删除
kafka-topics.sh --bootstrap-server 10.0.0.105:9092 --delete --topic linux79 
kafka-topics.sh --bootstrap-server 10.0.0.105:9092 --delete --topic linux79,linux80


早期kafka 0.8.2版本测试
1.查看topic信息:
cd /oldboyedu/softwares/kafka_2.11-0.8.2.2/bin
./kafka-topics.sh --zookeeper 10.0.0.102:2181/oldboyedu-kafka-0.8.2 --list


2.创建topic信息:
./kafka-topics.sh --zookeeper 10.0.0.102:2181/oldboyedu-kafka-0.8.2  --create --topic oldboyedu-linux79 --partitions 3 --replication-factor 2


3.启动生产者
./kafka-console-producer.sh --broker-list 10.0.0.101:19092 --topic  oldboyedu-linux79

4.启动消费者

./kafka-console-consumer.sh --zookeeper 10.0.0.102:2181/oldboyedu-kafka-0.8.2 --topic  oldboyedu-linux79 --from-beginning


5.启动消费者时可以指定消费者组名称
vim ../config/consumer.properties
...
group.id=oldboyedu-linux79-kafka

./kafka-console-consumer.sh --zookeeper 10.0.0.102:2181/oldboyedu-kafka-0.8.2 --topic  oldboyedu-linux79 --from-beginning  --consumer.config ../config/consumer.properties

 

 

 

 

 

kafka 1.1.0版本部署实战:
1.修改配置文件
vim /oldboyedu/softwares/kafka_2.11-1.1.0/config/server.properties
...
broker.id=101
listeners=PLAINTEXT://:29092
log.dirs=/oldboyedu/data/kafka-1.1.0
zookeeper.connect=10.0.0.102:2181,10.0.0.103:2181,10.0.0.104:2181/oldboyedu-kafka-1.1.0


2.同步数据
data_rsync.sh /oldboyedu/softwares/kafka_2.11-1.1.0

3.修改配置文件
for (( hostId=101;hostId<=105;hostId++ )); do  ssh elk${hostId}.oldboyedu.com "sed -ri 's#(broker.id=)101#\1${hostId}#' /oldboyedu/softwares/kafka_2.11-1.1.0/config/server.properties"; done



4.启动服务
for (( hostId=101;hostId<=105;hostId++ )); do  ssh elk${hostId}.oldboyedu.com "/oldboyedu/softwares/kafka_2.11-1.1.0/bin/kafka-server-start.sh -daemon /oldboyedu/softwares/kafka_2.11-1.1.0/config/server.properties"; done


5.停止服务
for (( hostId=101;hostId<=105;hostId++ )); do  ssh elk${hostId}.oldboyedu.com "/oldboyedu/softwares/kafka_2.11-1.1.0/bin/kafka-server-stop.sh -daemon /oldboyedu/softwares/kafka_2.11-1.1.0/config/server.properties"; done


6.验证服务
for (( hostId=101;hostId<=105;hostId++ )); do  ssh elk${hostId}.oldboyedu.com "grep ^broker.id /oldboyedu/softwares/kafka_2.11-1.1.0/config/server.properties"; done


7.
cd /oldboyedu/softwares/kafka_2.11-1.1.0/bin
3.启动生产者
./kafka-console-producer.sh --broker-list 10.0.0.101:29092 --topic oldboyedu

4.启动消费者

./kafka-console-consumer.sh --zookeeper 10.0.0.102:2181/oldboyedu-kafka-1.1.1 --topic oldboyedu --from-beginning   # offset存储在ZK集群,官方已经不推荐使用!


./kafka-console-consumer.sh --bootstrap-server 10.0.0.102:29092 --topic oldboyedu --from-beginning # offset存储在broker集群,官方推荐使用!:

 

 

 

 

 

 

 

 

脚本:data_rsync.sh

 

# 判断用户传参
if [ $# -ne 1 ];then
tput setaf 1
echo """
Please enter the path to synchronize,
Usage: $0 {path} [start_hostIP[-stop_hostIP]]
"""
tput setaf 7
exit
fi

 

# 获取父路径
dirPath=`dirname $1`

 

# 获取子路径
fileName=`basename $1`

 

# 进入到父路径
cd $dirPath

 

# 同步数据
for (( hostId=102;hostId<=105;hostId++ ))
do
tput setaf 2
echo "======= elk${hostId}.oldboyedu.com: $1 ======"
tput setaf 7
rsync -lr $fileName `whoami`@elk${hostId}.oldboyedu.com:$dirPath
if [ $? == 0 ];then
echo "数据同步成功!"
fi
done

 

 

 

脚本:manager-kafka.sh

# 判断用户传参
if [ $# -ne 1 ];then
tput setaf 1
echo """
Args Invalid, Usage : $0 {start|stop|restart|status}
"""
tput setaf 7
exit
fi


case $1 in
start)
echo "启动服务"
# ssh elk102.oldboyedu.com "zkServer.sh start"
# ssh elk103.oldboyedu.com "zkServer.sh start"
# ssh elk104.oldboyedu.com "zkServer.sh start"

# for (( hostId=102; hostId<=104; hostId++ )); do
# ssh elk${hostId}.oldboyedu.com "zkServer.sh start"
# done
ansible kafka -m shell -a 'kafka-server-start.sh -daemon /oldboyedu/softwares/kafka/config/server.properties'
;;
stop)
echo "停止服务"
# for (( hostId=102; hostId<=104; hostId++ )); do
# ssh elk${hostId}.oldboyedu.com "zkServer.sh stop"
# done
ansible kafka -m shell -a 'kafka-server-stop.sh'
;;
restart)
echo "重启服务"
ansible kafka -m shell -a 'kafka-server-stop.sh'
sleep 10
ansible kafka -m shell -a 'kafka-server-start.sh -daemon /oldboyedu/softwares/kafka/config/server.properties'
;;
status)
echo "查看服务"
;;
*)
echo Args Invalid, Usage : $0 {start|stop|restart|status}
;;
esac

 

posted on 2022-01-06 23:16  林枫_Yang  阅读(143)  评论(0编辑  收藏  举报