课程回顾:
1.消息队列的基本介绍
消息:在两个应用系统之间传递的数据
消息队列:应用系统之间的通信方式,发送消息之后可以马上进行返回
消息的生产者以及消息的消费者,都是无感知对方存在,可以实现解耦的功能
2、常用的消息队列介绍:
同一类消息队列:基于pub/sub模型
rabbitMQ
activeMQ
rocketMQ
kafka消息队列:基于push/poll,不算是一个标准的消息队列
3.kafka消息队列对比:
面试题:kafka的吞吐量是多大:
kafka的benchmark测试,即压力测试,吞吐量一般在每秒钟处理1-3w条数据左右
4.消息队列应用场景:
应用解耦
异步处理
限流削峰
5.消息队列两种模式:
点对点:两个人之间私聊
发布与订阅:群聊,一个人发消息,所有人都能看到
6.kafka的基本介绍以及kafka的架构图
producer:生产者,主要用于生产数据
consumer:消费者,主要用于消费数据
broker:kafka节点,服务器
topic:虚拟主题,归结于某一类消息的抽象
partition:分区的概念,数据存储于一个个partition中
segment:文件段,每个partition有多个segment断对方,默认达到1GB后就会生成新的segment段
.log:真实数据都是保存在.log文件中
.index:索引数据,对.log文件里面的数据进行索引
offset:偏移量,每条数据都有对应的唯一的偏移量
consumerGroup:消费者组,任意时刻,一个分区里面的数据,只能被同一个组里面的一个线程消费
7.kafka集群操作
8.kafka的JavaAPI
生产者:KafkaProducer
生产数据的分区问题:
第一种分区策略:既没有指定数据key,也没有指定分区号,使用轮询的方式来发送数据;
第二种分区策略:指定数据key,使用key的hashcode来进行数据分区,但一定注意,数据key要是变化的;
第三种分区策略:制定分区号来进行分区;
第四种分区策略:自定义分区,implements Partitioner
面试题:kafka当中数据不均衡,可以使用分区策略进行解决
consumer API:KafkaConsumer
提交offset方式:
第一种:自动提交offset,不可靠
第二种:手动提交offset,等到kafka数据处理完成之后手动提交,(enable.auto.commit false)
第三种:消费完一个分区提交一次offset
第四种:指定分区里面的数据进行消费
数据重复消费以及数据丢失
exactly once:消费且仅消费一次
at least once:至少消费一次
at most once:至多消费一次
kafka等到S他热爱mAPI(了解)
kafka当中log的存储机制以及log的查询机制
重点:log的查找机制:二分查找法
第一步:先确定数据的offset落在哪一个segment段里面
原因:一个partition当中有多个segment段,下一个segment文件命名是上一个segment文件最后一条数据的offset
第二步:查找.index文件,通过二分查找,找出offset对应哪一条数据,或者offset最近的一个offset值是多少
kafka当中数据不丢失机制:
生产者:ack机制
1:主分区以及副本分区都保存好了
0:主分区保存好了(一般使用0)
-1:没有确认机制,不用管数据是否保存好了
消费者:依靠offset来进行保证
broker:使用副本机制来复制数据到副本分区里面去
面试题:数据的存储,都是存储在磁盘里面:磁盘文件为什么能够做到速度这么快?
第一个原因:使用pageCache页缓存技术
第二个原因:顺序的读写磁盘,顺序的读写磁盘的速度比操作内存更快