一、背景和作用
kafka消息队列,主要作用有,消除峰值流量;解偶代码业务;异步处理业务
消除峰值流量:当网站接口超出承受服务器处理器能力的时候,可以通过kafka缓存队列,后面一个一个处理。
解偶代码业务:不同的业务流程可以拆分进行执行,比如发送短信,邮件的业务,其他终端不用写在自己业务中。
异步处理业务:当主要流程已经完成的时候,可以将部分不重要的任务进行发送消息后续处理。
二、基础架构
1、为了提高吞吐量,一个topic主题可以分为多个pattition分区
2、配合分区的设计,提出消费组的概念,组内每个消费者一起并行消费
3、为提高可用性,每个pattition分区可以增加多个副本。副本分为:leader,follower两种。生产和消费只针对leader。
4、如果leader挂了follower将被替代为leader。这个主要通过Zookeeper记录来决定的。
三、安装方式
1、官网下载地址:Apache Kafka
直接打开下载即可。上传服务器,解压压缩包即可。
2、cd 进入kafka解压文件夹:主要是 bin目录和config目标
bin目录可以查看到很多启动的各种脚本。
config目录可以查看到kafka的配置文件。consumer.properties生产者配置文件;producer.properties消费者配置文件;server.properties服务端配置文件。
3、配置server.properties
broker.id=0 标识kafka的唯一标识,在kafka集群中不能重复
log.dirs=/opt/mo... 指定kafka日志目录,不能使用默认的,默认是临时目录
zookeeper.connect=192.168.3.1:2121 ,192.168.3.1:2122 /kafka 指定zookeeper地址,可以配置kafka目录,作用是方便管理
配置完成后,要对其他服务器的kafka也进行配置一样的修改,然后去修改broker.id,因为是唯一的不能重复
4、 配置kafka环境变量
vim /etc/profile.d/my_env.sh
加入下面配置
export KAFKA_HOME=/opt/module/kafka #安装目录
export PATG=$PATH:$KAFKA_HOME/bin
source /etc/profile
同步到其他服务器。
5、启动即可。全部服务器都要启动
1、先启动zookeeper集群 sh zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties
2、集群kafka sh kafka-server-start /usr/local/etc/kafka/server.properties
四、kafka命令脚本
kafka-topics.sh // 主题脚本
#查看该kafka有多少主题:
sh kafka-topics.sh --bootstrap-server 192.168.3.1:9092 --list
#创建主题,一个分区,三个副本 first是主题名字
sh kafka-topics.sh --bootstrap-server 192.168.3.1:9092 --topic first --create --partitions 1 --replication-factor 3
#查看主题详细信息。
sh kafka-topics.sh --bootstrap-server 192.168.3.1:9092 --topic first --describe
#修改分区数,只能增加,不能减少
sh kafka-topics.sh --bootstrap-server 192.168.3.1:9092 --topic first --alter --partitions 3
创建生产者:
sh kafka-console-producer --topic first --broker-list localhost:9092
创建消费者:
sh kafka-console-consumer --bootstrap-server localhost:9092 -topic first
--from-beginning创建消费者,拿出以前的数据
sh kafka-console-consumer --bootstrap-server localhost:9092 -topic first --from-beginning
五、kafka生产者发送原理
Producer发送线程启动->interceptors拦截器->serializer序列化->partitioner分区器
interceptors拦截器:拦截数据进行校验和封装,一般不同
serializer序列化:将数据序列化格式,一般用自带的
partitioner分区器:将数据准备好大小,分块批次。默认大小32M,16K一批
发送条件
batch.size 批次包达到16K,开始发送
linger.ms 延迟时间,默认为0,需要更加情况调整
sender线程拿到数据后,发送到集群,集群将数据拿到之后,会同步分区数据,全部成功后会应答sender线程。