kafka基础架构
图片来源于尚硅谷
Producer:消息生产者,就是向kafka broker发消息的客户端。
Consumer:消息消费者,向kafka broker取消息的客户端。
Consumer Group(CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
Broker:一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。
Topic:可以理解为一个队列,生产者和消费者面向的都是一个topic。
Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分成多个partition,每个partition是一个有序的队列。
Replica:副本。一个topic的每个分区都要若干个副本,一个Lader和若干个Follower。
Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是Lader。
Follower:每个分区多个副本中的“从”,实时从Lader中同步数据,保持和Lader数据的同步。Lader发生故障时,某个Follower会成为新的Lader。
安装部署
hadoop102 | hadoop103 | hadoop104 |
zk | zk | zk |
kafka | kafka | kafka |
集群部署
Kafka官网下载网址:http://kafka.apache.org/downloads.html
在路径/opt/softwaer/下安装kafka
解压安装包
[atguigu@hadoop102 software]$ tar -zxvf kafka_2.12-3.0.0.tgz -C /opt/module/
修改解压后的文件名称
[atguigu@hadoop102 software]$ mv kafka_2.12-3.0.0/ kafka
进入到/opt/module/kafka/config/中,修改配置文件
[atguigu@hadoop102 config]$ vim server.properties
修改内容如下:
broker.id=0
log.dirs=/opt/module/kafka/datas
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka
分发kafka
[atguigu@hadoop102 module]$ xsync kafka/
分别在 hadoop103 和 hadoop104 上修改配置件/opt/module/kafka/config/server.properties 中的 broker.id=1、broker.id=2
注:broker.id 不得重复,整个集群中唯一。
配置环境变量
在/etc/profile.d/my_env.sh 文件中增加 kafka 环境变量配置
[atguigu@hadoop102 module]$ sudo vim /etc/profile.d/my_env.sh
添加内容如下:
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka
export PATH=$PATH:$KAFKA_HOME/bin
刷新一个环境变量
[atguigu@hadoop102 module]$ source /etc/profile
分发环境变量文件到其他节点,并 source
[atguigu@hadoop102 module]$ sudo /home/atguigu/bin/xsync /etc/profile.d/my_env.sh
[atguigu@hadoop103 module]$ source /etc/profile
[atguigu@hadoop104 module]$ source /etc/profile
启动集群
先启动zookeeper集群,然后启动Kafka
[atguigu@hadoop102 kafka]$ zk.sh start
依次分别在Hadoop102、Hadoop103、Hadoop104节点上启动kafka
[atguigu@hadoop102 kafka]$ bin/kafka-server-start.sh -daemonconfig/server.properties
[atguigu@hadoop103 kafka]$ bin/kafka-server-start.sh -daemonconfig/server.properties
[atguigu@hadoop104 kafka]$ bin/kafka-server-start.sh -daemonconfig/server.properties
注意:配置文件的路径要能够到 server.properties。
关闭集群
[atguigu@hadoop102 kafka]$ bin/kafka-server-stop.sh
[atguigu@hadoop103 kafka]$ bin/kafka-server-stop.sh
[atguigu@hadoop104 kafka]$ bin/kafka-server-stop.sh
注意:关闭Kafka集群时,需要等待几秒,否则Kafka还没有完全关闭就先关闭zookeeper集群,到时候会使集群关闭不了,到时候只能杀死进程。
集群启停脚本
在/home/atguigu/bin目录下创建文件kf.sh脚本文件
[atguigu@hadoop102 bin]$ vim kf.sh
脚本内容如下:
#! /bin/bash
case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
do
echo " --------启动 $i Kafka-------"
ssh $i "/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties"
done
};;
"stop"){
for i in hadoop102 hadoop103 hadoop104
do
echo " --------停止 $i Kafka-------"
ssh $i "/opt/module/kafka/bin/kafka-server-stop.sh "
done
};;
esac
添加执行权限
[atguigu@hadoop102 bin]$ chmod 777 kf.sh
启动集群命令
[atguigu@hadoop102 bin]$ kf.sh start
停止集群命令
[atguigu@hadoop102 bin]$ kf.sh stop
注意:停止 Kafka 集群时,一定要等 Kafka 所有节点进程全部停止后再停止 Zookeeper 集群。因为 Zookeeper 集群当中记录着 Kafka 集群相关信息,Zookeeper 集群一旦先停止, Kafka 集群就没有办法再获取停止进程的信息,只能手动杀死 Kafka 进程了。
Kafak命令行操作
kafka基础架构
主题命令行操作
查看操作主题命令参数
[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh
参数 | 描述 |
--bootstrap-server <String:server toconnect to> | 连接的Kafka Broker主机名称和端口号 |
--topic <String:topic> | 操作topic名称 |
--create | 创建主题 |
--delete | 删除主题 |
--alter | 修改主题 |
--list | 查看所有主题 |
--describe | 查看主题详细描述 |
--replication<Integer:#of partitions> | 设置分区数 |
--replication-factor<Integer:replication factor> | 设置分区副本 |
--config<String:name=value> | 更新系统默认的配置 |
查看当前服务器中的所有topic
[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --list
创建 first topic
[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --create --partitions 1 --replication-factor 3 --topic first
选项说明:
--topic 定义 topic 名
--replication-factor 定义副本数
--partitions 定义分区数
查看 first 主题的详情
[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --describe --topic first
修改分区数(注意:分区数只能增加,不能减少)
[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --alter --topic first --partitions 3
再次查看 first 主题的详情
[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --describe --topic first
删除topic
[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --delete --topic first