仿论坛项目--Kafka,构建TB级异步消息系统
阻塞队列
• BlockingQueue
- 解决线程通信的问题。
- 阻塞方法:put、take。
• 生产者消费者模式 - 生产者:产生数据的线程。
- 消费者:使用数据的线程。
• 实现类 - ArrayBlockingQueue
- LinkedBlockingQueue
- PriorityBlockingQueue、SynchronousQueue、DelayQueue等。
Kafka入门
• Kafka简介
- Kafka是一个分布式的流媒体平台。
- 应用:消息系统、日志收集、用户行为追踪、流式处理。
• Kafka特点 - 高吞吐量、消息持久化、高可靠性、高扩展性。
• Kafka术语 - Broker、Zookeeper
- Topic、Partition、Offset
- Leader Replica 、Follower Replica
启动Kafka
打开cmd,切换到安装路径E:\work\kafka_2.12-2.2.0
再输入bin\windows\zookeeper-server-start.bat config\zookeeper.properties
Spring整合Kafka
• 引入依赖
- spring-kafka
• 配置Kafka - 配置server、consumer
• 访问Kafka - 生产者
kafkaTemplate.send(topic, data); - 消费者
@KafkaListener(topics = {“test”})
public void handleMessage(ConsumerRecord record)
发送系统通知
• 触发事件
- 评论后,发布通知
- 点赞后,发布通知
- 关注后,发布通知
• 处理事件 - 封装事件对象
- 开发事件的生产者
- 开发事件的消费者
显示系统通知
• 通知列表
- 显示评论、点赞、关注三种类型的通知
• 通知详情 - 分页显示某一类主题所包含的通知
• 未读消息 - 在页面头部显示所有的未读消息数量
下列选项中,关于阻塞队列说法错误的是():
阻塞队列用于解决线程同步的问题。
阻塞队列的接口为BlockingQueue,该接口有ArrayBlockingQueue、LinkedBlockingQueue等多个实现类。
阻塞队列包含put方法,用于向队列中存入数据,当队列已满时,该方法将堵塞
阻塞队列包含take方法,用于从队列中获取数据,当队列已空时,该方法将堵塞
阻塞队列是一种特殊的队列,它能够解决多线程环境下的同步问题。
BlockingQueue 是 Java 中提供的一个接口,它定义了阻塞队列的基本操作,包括 put 方法和 take 方法等。
当使用 put 方法向队列中添加元素时,如果队列已经满了,则会阻塞当前线程直到其他线程消费掉一些元素或者等待一定时间后抛出异常。
同样地,当使用 take 方法从队列中取出元素时,如果队列为空,则也会阻塞当前线程直到其他线程生产新元素或者等待一定时间后抛出异常。
关于生产者与消费者模式,下列说法错误的是():
生产者线程,是负责产生数据的线程
消费者线程,是负责使用数据的线程
阻塞队列在生产者与消费者之间建立了缓冲,提高了系统的性能
生产者线程调用take方法,消费者线程调用put方法
“生产者线程,是负责产生数据的线程” — 这个描述是正确的,生产者通常是指创建或生成数据的角色。
“消费者线程,是负责使用数据的线程” — 这个描述也是正确的,消费者指的是消耗或使用由生产者产生的数据的角色。
“阻塞队列在生产者与消费者之间建立了缓冲,提高了系统的性能” — 这个描述同样正确,阻塞队列作为共享内存的一部分,可以在生产者和消费者之间建立缓冲区,从而提高系统性能。
“生产者线程调用take方法,消费者线程调用put方法” — 这个描述是错误的。实际上,生产者应该调用put方法来放入数据,而消费者则调用take方法来取走数据。
关于Kafka的特点,下列说法错误的是()
选项:o Kafka是一个分布式的流媒体平台。
o Kafka可以应用于消息系统、日志收集、用户行为追踪、流式处理等多种场景
o Kafka具有高吞吐量、消息持久化、高可靠性、高扩展性等优点
o Kafka采用硬盘持久化消息,所以性能比其他消息队列略低
Kafka是一个分布式的流媒体平台:这是正确的,Kafka是一个分布式的消息发布订阅平台,常用于构建实时的数据管道,以可靠地在应用程序之间传递数据。
Kafka可以应用于消息系统、日志收集、用户行为追踪、流式处理等多种场景:这也是正确的,Kafka由于其高性能和可扩展性,适用于多种应用场景,包括但不限于消息系统、日志收集、用户行为追踪和流式处理。
Kafka具有高吞吐量、消息持久化、高可靠性、高扩展性等优点:这是正确的,Kafka的设计目标之一就是提供高吞吐量、消息持久化、高可用性和可扩展性的特性。
Kafka采用硬盘持久化消息,所以性能比其他消息队列略低:这部分描述是错误的。虽然Kafka确实将消息存储在磁盘上进行持久化,但这并不意味着它的性能就低于其他消息队列。实际上,Kafka通过使用高效的数据结构和磁盘管理技术,能够在保持消息持久化的同时提供非常高的性能。因此,将消息持久化到磁盘并不一定会降低其性能表现。