Kafka系列之:深入理解死信队列和重试队列

这篇具有很好参考价值的文章主要介绍了Kafka系列之:深入理解死信队列和重试队列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、死信队列

  • 由于某些原因消息无法被正确地投递,为了确保消息不会被无故地丢弃,一般将其置于一个特殊角色的队列,这个队列一般称为私信队列。
  • 后续分析程序可以通过消费这个死信队列中的内容来分析当时遇到的异常情况,进而可以改善和优化系统。

二、回退队列

  • 与死信队列对应的还有一个回退队列的概念,如果消费者在消费时发生了异常那么就不会对这一次消费进行确认,进而发生回滚消息的操作之后,消息始终会放在队列的顶部,然后不断被处理和回滚,导致队列陷入死循环。
  • 为了解决问题,可以为每个队列设置一个回退队列,它和死信队列都是为异常处理提供的一种机制保障。
  • 实际情况下,回退队列的角色可以由死信队列和重试队列来扮演。

三、深入理解死信队列

  • 理解死信队列,关键是要理解死信。死信可以看作消费者不能处理收到的消息,也可以看作消费者不想处理收到的消息,还可以看作不符合处理要求的消息。比如消息内包含的消息内容无法被消费者解析,为了确保消息的可靠性而不被随意丢弃,故将其投递到死信队列中,这里的死信就可以看作消费者不能处理的消息。再比如超过既定的重试次数之后将消息投入死信队列,这里就可以将死信看作不符合处理要求的消息。

四、深入理解重试队列

  • 重试队列其实可以看作一种回退队列,具体指消费端消费消息失败时,为了防止消息无故丢失而重新将消息回滚到broker中。
  • 与回退队列不同的是,重试队列一般分成多个重试等级,每个重试等级一般也会设置重新投敌延时,重试次数越多投递延时就越大。
  • 举个例子:消息第一次消费失败入重试队列Q1,Q1的重新投递延时为5s,5s过后重新投递该消息。如果消息再次消费失败则入重试队列Q2,Q2的重新投递延时为10s,10s过后再次投递该消息,以此类推,重试越多次重新投递的时间就越久,为此还需要设置一个上限,超过投递次数就进入死信队列。

五、重试队列和延时队列的区别

  • 重试队列与延时队列有相同的地方,都需要设置延时级别。
  • 区别是:延时队列动作由内部触发,重试队列动作由外部消费端触发。
  • 延时队列作用一次,而重试队列的作用范围会向后传递。

文章来源地址https://www.toymoban.com/news/detail-409048.html

到了这里,关于Kafka系列之:深入理解死信队列和重试队列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【消息队列】细说Kafka消费者的分区分配和重平衡

    我们直到在性能设计中异步模式,一般要么是采用pull,要么采用push。而两种方式各有优缺点。 pull :说白了就是通过消费端进行主动拉去数据,会根据自身系统处理能力去获取消息,上有Broker系统无需关注消费端的消费能力。kafka采用pull模式 push : Broker主动推送消息到消费端

    2024年02月12日
    浏览(28)
  • 深入浅出RabbitMQ:顺序消费、死信队列和延时队列

    大家好,我是小❤,一个漂泊江湖多年的 985 非科班程序员,曾混迹于国企、互联网大厂和创业公司的后台开发攻城狮。 上篇文章(应对流量高峰的利器——消息中间件)中,我们已经介绍了消息中间件的用途,主要用作:解耦、削峰、异步通信、应用解耦,并介绍了业界常

    2024年02月03日
    浏览(28)
  • 【深入理解Kafka系列】 第二章 生产者

          生产者就是负责向Kafka发送消息的应用程序。Kafka一共两个大版本的客户端,第一个是开源之处使用Scala编写的客户端;第二个是0.9.x版本开始推出的java编写的客户端。 一个正常的生产逻辑需要以下几个步骤: (1)配置生产者客户端参数及创建相应的生产者实例。 (

    2023年04月26日
    浏览(27)
  • Kafka:消费者消费失败处理-重试队列

    kafka没有重试机制不支持消息重试,也没有死信队列,因此使用kafka做消息队列时,需要自己实 现消息重试的功能。 实现 创建新的kafka主题作为重试队列: 创建一个topic作为重试topic,用于接收等待重试的消息。 普通topic消费者设置待重试消息的下一个重试topic。 从重试topi

    2024年02月04日
    浏览(25)
  • SpringBoot整合SpringCloudStream3.1+版本的Kafka死信队列

    SpringBoot整合SpringCloudStream3.1+版本Kafka 添加死信队列配置文件,添加对应channel 通道绑定配置对应的channel位置添加重试配置 Kafka基本配置(application-mq.yml) 创建死信队列配置文件(application-dql.yml) 注意:这里的valueSerde使用了对象类型,需要搭配 application/json 使用,consumer接收

    2024年02月16日
    浏览(28)
  • 【RabbitMQ】 RabbitMQ 消息的延迟 —— 深入探索 RabbitMQ 的死信交换机,消息的 TTL 以及延迟队列

    消息队列是现代分布式应用中的关键组件,用于实现异步通信、解耦系统组件以及处理高并发请求。消息队列可以用于各种应用场景,包括任务调度、事件通知、日志处理等。在消息队列的应用中,有时需要实现消息的延迟处理、处理未能成功消费的消息等功能。 本文将介绍

    2024年02月05日
    浏览(56)
  • 【外行也能看懂的RabbitMQ系列(三)】—— RabbitMQ进阶篇之死信队列(内含视频演示业务和业务代码)

    准备篇 RabbitMQ安装文档 第一章 RabbitMQ快速入门篇 第二章 RabbitMQ的Web管理界面详解 第三章 RabbitMQ进阶篇之死信队列 第四章 RabbitMQ进阶篇之通过插件实现延迟队列 恭喜所有看到本篇文章的小伙伴,成功解锁了RabbitMQ系列之高级特性 死信队列 的内容🎁通过本文,你将清楚的了解

    2024年02月07日
    浏览(30)
  • 微服务springcloud 06.feign框架,配合ribbon 负载均衡和重试,配合hystrix 降级,监控和熔断测试

    feign是ribbon +hystrix 的整合 01.新建 sp09-feign 项目 第一步: 第二步:选择依赖: pom.xml 需要添加 sp01-commons 依赖: 第三步:修改sp09-feign项目的application.yml 第四步:sp09-feign的主程序添加 @EnableDiscoveryClient 和 @EnableFeignClients 02.feign 声明式客户端 第一步:声明三个代理接口 这里的

    2024年02月10日
    浏览(40)
  • 深入理解堆与优先队列

    堆 (Heap)是一种特殊的 完全二叉树 ,满足性质:除叶节点外每个节点的值都 大于等于 (或者 小于等于 )其孩子节点的值(该性质又称「 堆序性 」)。 堆有两种类型: 大根堆 (又称 最大堆 ):堆中每一个节点的值都 大于等于 其孩子节点的值。所以大根堆的特点是堆

    2024年02月10日
    浏览(26)
  • 深入理解数据结构:队列的实现及其应用场景

    队列(Queue)是一种具有先进先出(FIFO)特性的数据结构。在队列中,数据的插入和删除操作分别在队列的两端进行。插入操作在队列的尾部进行,而删除操作则在队列的头部进行。这种特性使得队列在很多实际应用中非常有用,比如任务调度、缓冲区管理等。 线性表是一种

    2024年04月28日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包