仿论坛项目--Kafka,构建TB级异步消息系统

2024-09-06 17:20

本文主要是介绍仿论坛项目--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通过使用高效的数据结构和磁盘管理技术,能够在保持消息持久化的同时提供非常高的性能。因此,将消息持久化到磁盘并不一定会降低其性能表现。

这篇关于仿论坛项目--Kafka,构建TB级异步消息系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142637

相关文章

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析