讲讲MQ自带的消费重试-Kafka、Pulsar实践

本文探讨了MQ消费重试的常见手段,重点关注Kafka和Pulsar的重试策略。Kafka提供固定间隔或递增间隔的重试,并支持死信队列,而Pulsar支持固定间隔重试、死信队列以及重试队列。文章对比了两者在重试和死信队列处理上的异同,并提供了相关配置示例。
摘要由CSDN通过智能技术生成

MQ消费重试的常见手段

在使用MQ时,必不可少的需要结合当前场景,考虑消费失败时如何处理。对于消息不重要的场景,失败就失败了,继续往下消费就行。但对于消息重要的场景,就需要有一定的机制去保证消息最终处理成功。

机制的手段有很多,大体思路都是,先进行重试,重试一定次数之后就走兜底逻辑。

  • 对于重试,可进行固定时间间隔的重试或做间隔时间递增的重试等
  • 对于兜底逻辑,包括消息投递到死信队列、告警、人工补偿、定时对账补偿等

下面主要讲如何使用好kafka和pulsar自带的消费重试功能,对于兜底逻辑来说只做异常日志的记录,其它手段较灵活,不在本文讨论范围内。另外本文使用的spring-kafka版本为2.3.0,pulsar版本为2.7.0。

 

kafka重试

消费失败重试

这里使用的是spring-kafka客户端

一个spring-kakfa consumer的使用例子如下:

@Component
@Slf4j
public class DemoListener {
    @KafkaListener(id = "groupId", topics = "demo-topic",
            containerFactory = "defaultKafkaListenerContainerFactory")
    public void handleMsg(ConsumerRecord<?, String> record, Acknowledgment ack) {
        try {
            doHandleMsg(record);
            //流程正常结束的手动ack。若中间有流程抛异常,会进入kafka的重试流程进行自动重试
            ack.acknowledge();
        } catch (Exception e) {
            log.error("[DemoListener.handleMsg] error, record:{}, exception:{}", record, Throwables.getStackTraceAsString(e));
        }
    }
}

对于consumer的配置,定义在了bean defaultKafkaListenerContainerFactory

    @Bean("defaultKafkaListenerContainerFactory")
    public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory() {
        ConcurrentKafkaListenerContainerFactor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值