仿牛客网社区项目总结 第五章

学习仿牛客网社区项目

代码&资源

各章节总结
第一章
第二章
第三章
第四章
第五章
第六章
第七章
第八章

消息队列

什么是阻塞队列?

在这里插入图片描述
阻塞队列,一种内部进行加锁控制的队列,它是线程安全的。当队列满时,生产者生产被阻塞;当队列空时,消费者消费被阻塞。

为什么要使用消息队列?

在这里插入图片描述
如图,12306购票系统,在将买票业务呈现在用户面前之前,使用一个消息队列,用于控制消息入队和出队的速度。如果没有它,把全部数据存入数据库,系统肯定要崩!

什么是消息队列?

消息队列(MQ),是一种消息中间件,同时也是一种更高性能的阻塞队列。通过topic对数据进行分类,支持多个业务的多组数据。

消息队列的分类?

MQ分为两种:

  1. P2P : peer to peer
    在这里插入图片描述
    该模式中,一条数据只能被一个消费者消费,消费后即出队。
  2. 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了
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值