dead-letter-queues

Dead Letter Queues是一种处理异常消息的思路,常用于实时计算,本文主要介绍Dead Letter Queues的使用场景以及设计思路

dead letter queues 是什么

dead letter queeus,简称DLQ,
这个队列的目的是记录那些可以被观测到的,不会中断正常业务的事件。可以简单理解为代码里手动try,catch的异常。

机器通常来说是一个漏桶模型,所有的流量进入一个漏桶, 漏桶的输出流量是固定的,当漏桶满了,新进入的流量就会被拒绝进入漏桶。因此我们在处理失败事件时,不能简单粗暴的重试,因为这个时候,漏桶通常已经满了,尝试只能引起更多的拒绝响应。所以重试操作看起来更像是处理延迟的操作,我们要确保的是会处理到这个事件,即使这个事件已经过了配置的超时时间。

dead letter queues 优势

不阻塞处理流程

当遇到处理失败的事件,我们可以把它们发送到定义好的DLQ里,保证整理处理流程的畅通。

解耦

正常的事件和失败的事件物理隔离,可以使得对应处理逻辑也隔离。处理失败事件可以单独使用独立的服务。

监控

把处理失败的事件单独发送到DLQ可以更方便做出统计,比如事件失败率,失败事件数量在时间段上的波峰波谷等。

总结

DLQ这种做法还是比较常见的,甚至我们为了更好的监控kafka客户端的状态,还会把客户端的metrics发送到设计好的topic。

参考资料

uber的DLQ机制

ulysses wechat
订阅+