---
url: /notes/面试/消息队列/index.md
---
\[TOC]

## 如何保证消息不丢失？

[如何保证消息不丢失？ - 消息队列面试题 - 面试鸭 - 程序员求职面试刷题神器](https://www.mianshiya.com/bank/1801255316257841153/question/1801955779278086145)

需要生产消息、存储消息、消息消费三个阶段共同努力

**生产者的消息确认**：生产者在发送消息时，需要通过消息确认机制保证消息成功到达

**存储消息**：broker收到消息后，需要将消息持久化到磁盘上，避免消息因内存丢失。

**消费者的消息确认**：消费者在处理消息后，再向消息队列发送确认，如果未发送确认，消息队列需要重新投递该消息，如果持续失败，可通过重试、死信队列、日志等方式解决

## 如何处理重复消息

[如何处理重复消息？ - 消息队列面试题 - 面试鸭 - 程序员求职面试刷题神器](https://www.mianshiya.com/bank/1801255316257841153/question/1801964482106564610)

让消费者的处理逻辑具有幂等性，保证无论同一条消息被消费多少次，结果都是一样的

## 如何保证消息的有序性

[如何保证消息的有序性？ - 消息队列面试题 - 面试鸭 - 程序员求职面试刷题神器](https://www.mianshiya.com/bank/1801255316257841153/question/1802305740993798145)

Kafka：消息在分区内部有序。生产者发送消息时，可以指定分区。相同key的消息都发送到同一个分区

## 如何处理消息堆积

[如何处理消息堆积？ - 消息队列面试题 - 面试鸭 - 程序员求职面试刷题神器](https://www.mianshiya.com/bank/1801255316257841153/question/1802306411117748226)

增加消费者线程数量

增加消费实例

优化消费者逻辑

Topic对应的分区/队列数 >= 消费者实例数，一个Topic中，一个分区/队列只会分配给一个消费实例

## kakfka中zookeeper的作用

[Kafka 中 Zookeeper 的作用？ - 消息队列面试题 - 面试鸭 - 程序员求职面试刷题神器](https://www.mianshiya.com/bank/1801255316257841153/question/1803079507444752385)

[Kafka为什么要抛弃 Zookeeper？ - 消息队列面试题 - 面试鸭 - 程序员求职面试刷题神器](https://www.mianshiya.com/bank/1801255316257841153/question/1803241276880445442#heading-3)
