前言
- Kafka传统定义:是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。
- 发布/订阅模式:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接收感兴趣的消息
- Kafka最新定义:是一个开源的分布式事件流平台 (Event Streaming
Platform),被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。
测试完后用
ps aux | grep "kafka-console-consumer" | grep -v grep
结束控制台kafka任务
一、Kafka概述
1. 消息队列
目前企业中比较常见的消息队列产品主要有 Kafka、ActiveMQ、RabbitMQ、RocketMQ 等,在大数据场景主要采用Kafka作为消息队列
🥩传统的消息队列的应用场景包括:缓存/消峰、解耦和异步通信
🥩消息队列的两种模式:
2. Kafka基础架构
.👉解读:
Producer
:消息生产者,就是向Kafka broker发送消息的客户端。Consumer
:消息消费者,向Kafka broker获取消息的客户端。注:生产和消费只针对"Leader"。Consumer Group(CG)
:消费者组,由多个 consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内的一个消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。Broker
:一台Kafka服务器就是一个broker,一个集群由多个broker组成。一个broker可以容纳多个topic。Topic
:可以理解成一个队列,生产者和消费者面向的都是一个topic。Partition
:为了实现扩展性,一个非常大的topic可以分布到多个broker上,一个topic可以分为多个partition,每个partition都是一个有序的队列。Replica
:副本。一个topic 的每个分区都有若干个副本,一个Leader 和若干个Follower。Leader
:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是Leader。Follower
:每个分区多个副本中的“从”,实时从Leader 中同步数据,保持和Leader 数据的同步。Leader 发生故障时,某个Follower 会成为新的Leader。Zookeeper
:记录了哪些服务器上线了,和一个分区中,谁是"Leader"。
二、Kafka安装
1. 安装配置kafka-3.5.0
# 下载
cd /opt/software/;wget https://archive.apache.org/dist/kafka/3.5.0/kafka_2.13-3.5.0.tgz
# 解压
tar -zxvf kafka_2.13-3.5.0.tgz -C /opt/module/
cd /opt/module/;ll
# 修改名称
mv kafka_2.13-3.5.0/ kafka-3.5.0
# 进入到配置文件的目录"/opt/module/kafka-3.5.0/config",修改配置文件"server.properties"
# 第24行全局唯一的编号,各个节点不能重复
broker.id=0
# 第62行kafka日志存放路径
log.dirs=/opt/module/kafka-3.5.0/datas
# 第125行配置连接Zookeeper集群的地址(在zk根目录下创建/kafka,方便管理)
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka-3.5.0
# 记得分发
xsync kafka-3.5.0
# 分别在103、104上vim /opt/module/kafka-3.5.0/config/server.properties修改broker.id
broker.id=1
broker.id=2
# 增加环境变量
vim /etc/profile.d/my_env.sh
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka-3.5.0
export PATH=$PATH:$KAFKA_HOME/bin
# 分发
xsync /etc/profile.d/my_env.sh
# 每个服务器上分别刷新环境配置文件
source /etc/profile
2. 启动kafka
建议先安装zookeeper👉点击前往下载zookeeper教程
📊集群统一启动和停止shell脚本vim /root/bin/kf.sh
#!/bin/bash
case $1 in
"start")
for i in hadoop102 hadoop103 hadoop104
do
echo "--- 启动 $i kafka ---"
ssh $i "sh /opt/module/kafka-3.5.0/bin/kafka-server-start.sh -daemon /opt/module/kafka-3.5.0/config/server.properties"
done
;;
"stop")
for i in hadoop102 hadoop103 hadoop104
do
echo "--- 停止 $i kafka ---"
ssh $i "sh /opt/module/kafka-3.5.0/bin/kafka-server-stop.sh"
done
;;
esac
最后加权限
chmod 777 kf.sh
📊Kafka,启动!
# 先启动zookeeper
zk.sh start
kf.sh start
3. 命令行操作
对不同模块进行操作时有不同的脚本,三大部分脚本如下图(执行脚本命令时可以不在Kafka目录下,因为配置了环境变量)
3.1. 主题部分命令行操作
# 查看操作主题命令行参数
kafka-topics.sh
# 客户端连接服务端Kafka还设置一个服务端提高可靠性,并查看当前服务器中的所有 topic(发现是空)
kafka-topics.sh --bootstrap-server hadoop102:9092,hadoop103:9092 --list
参数 | 描述 |
---|---|
–bootstrap-server <String: server toconnect to> | 连接的 Kafka Broker主机名称和端口号 |
–topic <String: topic> | 操作的topic名称 |
–create | 创建主题 |
–delete | 删除主题 |
–alter | 修改主题 |
–list | 查看所有主题 |
–describe | 查看主题详细描述 |
–partitions <Integer: # of partitions> | 设置分区数 |
–replication-factor<Integer: replication factor> | 设置分区副本 |
–config<String: name=value> | 更新系统默认的配置 |
# 创建 first topic,必须指定分区和副本
kafka-topics.sh --bootstrap-server hadoop102:9092 --create --partitions 1 --replication-factor 3 --topic first
# 查看 first 主题的详情
kafka-topics.sh --bootstrap-server hadoop102:9092 --topic first --describe
# 修改分区数(注意:分区数只能增加,不能减少)
kafka-topics.sh --bootstrap-server hadoop102:9092 --alter --topic first --partitions 3
# 不能通过命令行的方式修改副本数!
# 删除first topic
kafka-topics.sh --bootstrap-server hadoop102:9092 --delete --topic first
3.2. 生产者、消费者命令行操作
# 查看操作生产者命令参数
kafka-console-producer.sh
# 查看操作消费者命令参数
kafka-console-consumer.sh
参数 | 描述 |
---|---|
👉生产者 | |
-bootstrap-server <String:server toconnect to> | 连接的Kafka Broker主机名称和端口号 |
–topic String:topic | 操作的topic名称 |
👉消费者 | |
–bootstrap-server <String:server toconnect to> | 连接的Kafka Broker主机名称和端口号 |
–topic <String: topic> | 操作的topic名称 |
–from-beginning | 从头开始消费 |
–group <String: consumer group id> | 指定消费者组名称 |
# 在102创建生产者向topic发送数据(producer)
kafka-console-producer.sh --bootstrap-server hadoop102:9092 --topic first
# 在103创建消费者查看记录(consumer)
kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic first
# 在103上查看102历史到现在的消费记录
kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic first --from-beginning
总结
🥳顺利安装好kafka