本文正在参加「金石计划 . 瓜分6万现金大奖」
之前我在文章中提到过什么是Kafka,介绍了消息队列的相关概念以及应用场景--缓存/消峰、解耦和异步通信。不了解的读者可以看我这篇文章 juejin.cn/post/713531… 。
Kafka通俗讲解
对于Kafka的概念,我们首先应该知道它是一个消息队列(Message Queue),也就是先进先出,那么这就可以想到电商中的秒杀系统,由Kafka充当一个缓冲区,不至于使得服务器宕机;其次它是基于分布式的,也就是可以进行多台机器交互;最后它是基于发布/订阅模式,也就是由消费者发布某一个topic下的数据,由生产者进行订阅这个topic。
应用场景详解
(1)缓冲/消峰
举例,双十一淘宝京东等app搞秒杀活动,假如秒杀服务器的处理能力是1百万人,但此时有10亿人参加,不使用消息队列的系统会迅速宕机。就如同前几年双十一用户付款时,系统出现错误无法支付一样。那这就是因为,同一时刻远超于秒杀系统处理能力上限的用户人数同时点击,系统需要处理每一位用户的订单、点击时间以及优惠的额度,那这就会使得只能处理1百万人的服务器迅速宕机。而如果在用户点击和服务器之间加上消息队列,由消息队列充作缓冲池,队列作为一个最基本的数据结构,具有先进先出的特点,所以这就使得它可以筛选出队列中的前几条数据,送进秒杀服务器中进行处理,那剩下的人就会在消息队列中被pass掉,由此减轻了服务器的工作量,降低了服务器宕机的风险。
(2)解耦
就是软件工程中的耦合度的概念--对象之间的依赖性,降低各个组件之间的耦合度,方便后续每个组件单独开发而不用去修改与之相连的其他组件。
(3)异步通信 那么首先需要知道什么是同步通信,也就是同步处理,可以这样理解,假设用户在网页上注册个人信息,这个信息会被写入到数据库,然后需要调用发送短信的接口进行短信验证,但在等待的这段时间页面是无法操作的,所以用户体验不好。但如果采用MQ消息队列的话,会先在写入数据库后,然后发送消息的请求会进入消息队列进行排队,按队列的顺序进行处理,但这个时间段用户是可操作的。
Kafka的安装
安装Kafka之前,需要先安装Zookeeper,因为集群中的消费者(例如,hadoop、Flink、Spark等)需要知道哪些是生产者,而Zookeeper就告诉这些消费者现在的生产者是Kafka。而最新的Kafka版本可以不依赖Zookeeper了,它可以在依赖中自己指定,我们这里以老版本Kafka为例进行安装。
1.解压安装包
2.修改kafka目录下的config中的配置文件
(1)修改不同机器的broker的id号,broker.id=0,broker.id=1,broker.id=2
#broker的全局唯一编号,不能重复,只能是数字。
broker.id=0
broker.id不能重复,整个集群中唯一!!!
(2)配置连接Zookeeper的集群地址
#配置连接Zookeeper集群地址(在zk根目录下创建/kafka,方便管理)
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka
3.分发给其他机器安装包
[yong@hadoop102 module]$ xsync kafka/
4.配置环境变量 (1)在/etc/profile.d/my_env.sh文件中增加kafka环境变量配置
增加以下内容
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka
export PATH=$PATH:$KAFKA_HOME/bin
(2)刷新环境变量
[yong@hadoop102 module]$ source /etc/profile
5.启动集群
(1)先启动Zookeeper集群,再启动Kafka
[yong@hadoop102 zookeeper-3.5.7]$ bin/zkServer.sh start
[yong@hadoop103 zookeeper-3.5.7]$ bin/zkServer.sh start
[yong@hadoop104 zookeeper-3.5.7]$ bin/zkServer.sh start
(2)启动Kafka
[yong@hadoop102 kafka]$ bin/kafka-server-start.sh -daemon config/server.properties
[yong@hadoop103 kafka]$ bin/kafka-server-start.sh -daemon config/server.properties
[yong@hadoop104 kafka]$ bin/kafka-server-start.sh -daemon config/server.properties