什么是死信队列?

存放那些无法被正确处理的消息。这些消息可能因为格式错误、业务逻辑异常、下游服务不可用导致。

Kafka中没有类似于RabbitMQ那样的内置死信队列。

如果通过Kafka实现死信队列?

创建一个独立的专门用于存放消息的死信Topic

工作流程:

  • 消费者判断失败:消费者处理消息时,判断消息无法被正常消费,例如格式错误、消费异常等。
  • 消息转发:将原始消息发送到死信Topic。
  • 死信消费者:启动一个独立的消费者组,专门消费死信消息。例如人工干预、日志记录等。

微服务架构中的作用

  • 故障隔离: 避免因少量异常消息导致整个消费者组阻塞或崩溃。
  • 错误分析: 集中管理异常消息,方便运维人员和开发人员分析错误原因。
  • 数据修复与重试: 对于临时性错误,可以在DLQ中对消息进行修复后重新投递;对于永久性错误,则进行记录和人工处理。
  • 提高系统韧性: 即使部分消息处理失败,也不会影响主业务流程的正常运行。