学习仿牛客网社区项目
各章节总结 |
---|
第一章 |
第二章 |
第三章 |
第四章 |
第五章 |
第六章 |
第七章 |
第八章 |
文章目录
消息队列
什么是阻塞队列?
阻塞队列,一种内部进行加锁控制的队列,它是线程安全的。当队列满时,生产者生产被阻塞;当队列空时,消费者消费被阻塞。
为什么要使用消息队列?
如图,12306购票系统,在将买票业务呈现在用户面前之前,使用一个消息队列,用于控制消息入队和出队的速度。如果没有它,把全部数据存入数据库,系统肯定要崩!
什么是消息队列?
消息队列(MQ),是一种消息中间件,同时也是一种更高性能的阻塞队列。通过topic对数据进行分类,支持多个业务的多组数据。
消息队列的分类?
MQ分为两种:
- P2P : peer to peer
该模式中,一条数据只能被一个消费者消费,消费后即出队。 - Pub/Sub : 发布与订阅
该模式中,一条数据可以被多个消费者消费,数据存在某个位置,消费者按索引获取。
Kafka
什么是Kafka?
kafka 是一个分布式的基于消息的发布-订阅的消息队列,已经不只是消息队列的功能了。
应用:消息系统、日志采集、用户行为追踪、流式处理。
Kafka有哪些特点?
高吞吐量:处理TB级数据;
消息持久化:存储在硬盘中,顺序读写,性能高于随机读写内存;
高可靠性:分布式部署;
高拓展性:添加服务器很容易。
Push or Pull?
面试官问到了这个问题,做个记录
producer使用push模式发布消息,consumer使用pull模式消费消息。push是被动的,pull是主动的。
push模式的目标是尽可能快地处理消息,producer可以这样,但consumer需要考虑后续处理消息的能力,如果速率过快可能会导致服务器拒绝服务或网络拥塞。所以主动pull显然更适合。
Kafka的常用术语?
broker:kafka服务器;
Zookeeper:用于管理集群的中间件;
Topic:主题,生产者发布消息到该位置;
Partition:分区,将Topic分为多个区,便于管理;
Offset:各分区内的索引,消费者消费消息要用到。
Kafka的启动命令?
启动zookeeper
bin\windows\zookeeper-server-start.bat config\zookeeper.properties
启动server
bin\windows\kafka-server-start.bat config\server.properties
创建topic
kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
查看Topic
kafka-topics.bat --list --bootstrap-server localhost:9092
生产者生产数据
kafka-console-producer.bat --broker-list localhost:9092 --topic test
消费者消费数据
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning
在项目哪里用到了Kafka?
当有点赞,评论,关注、发帖、删帖请求时,Producer发布消息。
当队列中有消息时,Consumer主动消费消息。
一直很纳闷,EventConsumer这个类里的方法,在项目任何地方都没被调用,它是怎么执行的?原来是Kafka一直监听信道,一有消息就主动pull了