Kafka概述及其安装部署

概述

预备知识 (了解消息队列)

概念
消息队列,英文名:Message Queue,经常缩写为MQ。从字面上来理解,消息队列是一种用来存储消息的队列。

消息队列中间件
消息队列中间件就是用来存储消息的软件(组件)

例如:
为了分析网站的用户行为,我们需要记录用户的访问日志。
这些一条条的日志,可以看成是一条条的消息,我们可以将它们保存到消息队列中。
将来有一些应用程序需要处理这些日志,就可以随时将这些消息取出来处理。

消息队列的应用场景

  1. 异步处理
    在这里插入图片描述

电商网站中,新的用户注册时,需要将用户的信息保存到数据库中,同时还需要额外发送注册的邮件通知、以及短信注册码给用户。
但因为发送邮件、发送注册短信需要连接外部的服务器,需要额外等待一段时间,此时,就可以使用消息队列来进行异步处理,从而实现快速响应。

  1. 系统解耦
    在这里插入图片描述
  2. 流量削峰
    在这里插入图片描述
  3. 日志处理(大数据领域常见)
    在这里插入图片描述
    大型电商网站(淘宝、京东、国美、苏宁…)、App(抖音、美团、滴滴等)等需要分析用户行为,要根据用户的访问行为来发现用户的喜好以及活跃情况,需要在页面上收集大量的用户访问信息。

交互模型

  1. 请求响应模型
  • http请求响应模型
    在这里插入图片描述
  • 数据库请求响应模型
    在这里插入图片描述
  1. 生产者、消费者模型
    在这里插入图片描述

注:

  1. kafka就是基于该交互模型
  2. 所以使用kafka时需要知道哪个是生产者,哪个是消费者

消息队列的两种模型

  1. 点对点模型
    在这里插入图片描述

消息发送者生产消息发送到消息队列中,然后消息接收者从消息队列中取出并且消费消息。
消息被消费以后,消息队列中不再有存储,所以消息接收者不可能消费到已经被消费的消息。

特点:

  • 一对一:每个消息只有一个接收者(Consumer)(即一旦被消费,消息就不再在消息队列中)
  • 无依赖:发送者和接收者间没有依赖性,发送者发送消息之后,不管有没有接收者在运行,都不会影响到发送者下次发送消息;
  • 接收反馈:接收者在成功接收消息之后需向队列应答成功,以便消息队列删除当前接收的消息;
  1. 发布订阅模式

在这里插入图片描述
特点:

  • 一对多:每个消息可以有多个订阅者;
  • 有依赖:发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。
  • 提前订阅:为了消费消息,订阅者需要提前订阅该角色主题,并保持在线运行;

kafka基本概述

概念
Kafka是一个高吞吐高性能高并发高可靠性等基于订阅发布模式的分布式消息队列系统

  1. 高吞吐:使用分布式磁盘存储,没有使用HDFS
  2. 高性能:实时对数据就行读写
  • 使用了分布式内存,用到的是PageCache:操作系统的页缓存机制
  • 它属于操作系统层次的内存,即使Kafka进程故障,重启Kafka,数据依旧在内存中
  1. 高并发:分布式并行读写
  2. 高可靠:分布式主从架构
  3. 高安全:
  • 内存:Log记录操作
  • 磁盘:副本机制

应用场景

  • 大数据实时架构中,用于实时数据的临时存储

在这里插入图片描述

上图,我们可以看到:

  • Producers(生产者):可以有很多的应用程序,将消息数据放入到Kafka集群中。
  • Consumers(消费者):可以有很多的应用程序,将消息数据从Kafka集群中拉取出来。
  • Connectors(连接器):Kafka的连接器可以将数据库中的数据导入到Kafka,也可以将Kafka的数据导出到
  • Stream Processors(流处理器):流处理器可以Kafka中拉取数据,也可以将数据写入到Kafka中。

安装部署

  1. 将Kafka的安装包上传到虚拟机,并解压
cd /export/soft/
tar -zxvf kafka_2.12-2.4.1.tgz -C ../server/
  1. 修改server.properties
cd /export/server/kafka_2.12-2.4.1/config
vim server.properties

添加以下内容:
# 指定broker的id
broker.id=0

# 指定Kafka数据的位置
log.dirs=/export/server/kafka_2.12-2.4.1/data

# 配置zk的三个节点
zookeeper.connect=node1:2181,node2:2181,node3:2181
  1. 将安装好的kafka复制到另外两台服务器
cd /export/server
scp -r kafka_2.12-2.4.1/ node2:$PWD
scp -r kafka_2.12-2.4.1/ node3:$PWD

修改另外两个节点的broker.id分别为1和2:
---------node2--------------
cd /export/server/kafka_2.12-2.4.1/config
vim server.properties
broker.id=1

--------node3--------------
cd /export/server/kafka_2.12-2.4.1/config
vim server.properties
broker.id=2

  1. 配置KAFKA_HOME环境变量
vi /etc/profile
export KAFKA_HOME=/export/server/kafka_2.12-2.4.1
export PATH=:$PATH:${KAFKA_HOME}

分发到各个节点
scp /etc/profile node2:$PWD
scp /etc/profile node3:$PWD
每个节点加载环境变量
source /etc/profile
  1. 启动服务器
# 启动ZooKeeper
/export/server/zookeeper-3.4.6/bin/start-zk-all.sh

# 启动Kafka
cd /export/server/kafka_2.12-2.4.1
nohup bin/kafka-server-start.sh config/server.properties &

# 测试Kafka集群是否启动成功
bin/kafka-topics.sh --bootstrap-server node1:9092 --list

在这里插入图片描述
未报错说明Kafka集群启动成功

配置Kafka一键启动/关闭脚本

  1. 进入执行脚本目录
cd /export/server/kafka_2.12-2.4.1/bin/
vim slave
  1. 编写slave配置文件,用于保存要启动哪几个节点上的kafka
node1
node2
node3
  1. 编写start-kafka.sh脚本
vim start-kafka.sh

添加以下内容:
cat /export/server/kafka_2.12-2.4.1/bin/slave | while read line
do
{
    
    
 echo $line
 ssh $line "source /etc/profile;export JMX_PORT=9988;nohup ${KAFKA_HOME}/bin/kafka-server-start.sh ${KAFKA_HOME}/config/server.properties >/dev/nul* 2>&1 & "
}&
wait
done
  1. 编写stop-kafka.sh脚本
vim stop-kafka.sh

添加以下内容:
cat /export/server/kafka_2.12-2.4.1/bin/slave | while read line
do
{
    
    
 echo $line
 ssh $line "source /etc/profile;jps |grep Kafka |cut -d' ' -f1 |xargs kill -s 9"
}&
wait
done
  1. 给start-kafka.sh、stop-kafka.sh配置执行权限
chmod u+x start-kafka.sh
chmod u+x stop-kafka.sh
  1. 执行一键启动、关闭
./start-kafka.sh
./stop-kafka.sh

Kafka软件目录结构

在这里插入图片描述

基本操作

  1. 创建topic
    Kafka中所有的消息都是保存在主题中,要生产消息到Kafka,首先必须要有一个确定的主题。
# 创建名为test的主题
bin/kafka-topics.sh \
--create \
--bootstrap-server node1:9092 \
--topic test

# 查看目前Kafka中的所有主题
bin/kafka-topics.sh \
--list \
--bootstrap-server node1:9092

查看test主题详细信息

bin/kafka-topics.sh \
--bootstrap-server node1:9092 \
--describe \
--topic test

在这里插入图片描述
第一行:对test主题的所有Partition进行一个总结

PartitionCount:统计主题中Partition的总数,由图可知test有一个分区
ReplicationFactor:统计主题中分区副本的数,由图可知test的一个分区有一个副本
segment.bytes:表示一个segment文件的大小

从第二行开始:

Partition:分区序号,0代表第一个分区
Leader:表示当前分区负责读写的副本在第几台机器上,2代表第三台机器(从0开始,2表示第三台broker)
Replicas:表示当前分区副本在哪些机器上,2代表第三台机器
Isr:表示副本都已同步的的节点集合

删除test主题

bin/kafka-topics.sh \
--delete \
--topic test
  1. 生产消息到Kafka
    使用Kafka内置的测试程序,生产一些消息到Kafka的test主题中:
bin/kafka-console-producer.sh \
--broker-list node1:9092 \
--topic test
  1. 从Kafka消费消息
    复制node1的shell窗口,
    使用下面的命令来消费 test 主题中的消息:
bin/kafka-console-consumer.sh \
--bootstrap-server node1:9092 \
--topic test \
--from-beginning

发送的:
在这里插入图片描述
接收到的:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zh2475855601/article/details/115215310