# 常见问题

## 通用

### FlowMQ 是什么？

FlowMQ 是新一代高性能统一消息与流处理平台，在单一平台中原生支持 MQTT、Kafka 和 AMQP 协议。它将消息队列、数据流和发布/订阅消息传递融合为一套统一系统，消除了管理多个专用 Broker 的复杂性。

### FlowMQ 与 Kafka、RabbitMQ 有何区别？

FlowMQ 结合了两者的优势：

- **类似 Kafka**：提供持久化、可重放的 Stream（流），支持消费者管理偏移量，适合事件溯源和流处理。
- **类似 RabbitMQ**：提供 Queue（队列），消息投递给消费者，消费确认后删除。

FlowMQ 的目标是在更简单的运维模型和统一 API 下，同时提供这两种模型的能力。

## 概念

### Topic、Queue 和 Stream 有什么区别？

- **Topic（主题）**：消息发布的路由地址。客户端可以直接从 Topic 消费，也可以通过 Queue 或 Stream 来接收消息。
- **Queue（队列）**：提供消息队列语义：消息先缓存到队列中，再按需投递给消费者，消费确认（ACK）后删除。
- **Stream（流）**：持久化、有序的消息日志。多个消费者（组）可以独立读取同一个 Stream，各自追踪偏移量。消息不会因读取而删除，根据保留策略过期。适合发布/订阅、事件溯源、可重放的事件历史。

### 什么时候用 Queue，什么时候用 Stream？

- **Queue**：当你需要将任务分发给一组 Worker，确保每个任务只被处理一次（如请求处理、图像缩放等）。
- **Stream**：当你需要将消息广播给多个独立消费者，或需要持久化的可重放事件历史（如用户行为追踪、金融行情、审计日志等）。

### 消费者未确认 (ack) Queue 中的消息会怎样？

如果消费者收到消息后崩溃或断连，FlowMQ 不会认为该消息已处理。超过可配置的超时时间后，FlowMQ 会将消息重新投递给其他可用的消费者，确保消息不会丢失。

### 消息持久化保证是什么？

发布到 FlowMQ 的消息会在写入磁盘后才向生产者返回确认，即使 Broker 重启也不会丢失消息。

