# 2023-mqintroduction **Repository Path**: interview_44/2023-mqintroduction ## Basic Information - **Project Name**: 2023-mqintroduction - **Description**: 介绍mq,mq入门,学习使用 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-02-22 - **Last Updated**: 2023-02-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 2023-mqintroduction #### mq入门,以rabbitmq与kafka为主介绍 1、mq的主要用途,削峰,应对高并发场景。 2、mq如何实现高可用,rabbitmq没有分布式,只有镜像某事。 3、如何应对消息重复消费。 4、如何应对消息丢失。 5、如何应对消息顺序不一致。 6、快速处理堆积消息。 ![](./picture/mq-introduction.drawio.png) 7、设计一个mq 数据存储,broker -> topic -> partition,每个 partition 放一个机器,就存一部分数据。如果现在资源不够了,简单啊,给 topic 增加 partition,然后做数据迁移,增加机器。 其次你得考虑一下这个 mq 的数据要不要落地磁盘吧?那肯定要了,落磁盘才能保证别进程挂了数据就丢了。那落磁盘的时候怎么落啊?顺序写,这样就没有磁盘随机读写的寻址开销,磁盘顺序读写的性能是很高的,这就是 kafka 的思路。 其次你考虑一下你的 mq 的可用性啊?这个事儿,具体参考之前可用性那个环节讲解的 kafka 的高可用保障机制。多副本 -> leader & follower -> broker 挂了重新选举 leader 即可对外服务。 能不能支持数据 0 丢失啊?可以的,参考我们之前说的那个 kafka 数据零丢失方案。