网站logo做h1标签,网站 页面风格 建设,建行个人网上银行,wordpress 手动 摘录一、消息丢失的时机#xff1f; 生产端消息丢失 问题#xff1a;因为网络异常导致消息发送失败#xff0c;此时可能会产生消息丢失的情况#xff0c;重试后可能产生消息重复生产的情况。 解决#xff1a;超时重试#xff0c;并在消费端保证幂等性。 消息队列中消息丢失 …一、消息丢失的时机 生产端消息丢失 问题因为网络异常导致消息发送失败此时可能会产生消息丢失的情况重试后可能产生消息重复生产的情况。 解决超时重试并在消费端保证幂等性。 消息队列中消息丢失 问题如kafka是将数据存储在磁盘如果每条消息写入时都立马存储在磁盘中会产生很多随机IO随机IO耗时很高因此数据是先写入缓冲区中再根据特定的时机刷新到磁盘中减少随机IO的开销。假设还未刷新到磁盘就出现宕机情况则会产生消息丢失的情况。 解决可以考虑以集群方式部署Kafka服务通过部署多个副本备份数据保证消息尽量不丢失。 消费端消费时丢失 问题消费者消费消息的进度是记录在消息队列集群中的而消费的过程分为三步接收消息、处理消息、更新消费进度。消费端网络抖动或者消费端业务逻辑异常导致中断此时会产生消息丢失的情况。 解决一定要等到消息接收和处理完成后才能更新消费进度但是这也会造成消息重复的问题比方说某一条消息在处理之后消费者恰好宕机了那么因为没有更新消费进度所以当这个消费者重启之后还会重复地消费这条消息。
二、如何避免重复消费 生产端重复发送 kafka支持生产端幂等这种特性保证消息虽然可能在生产端产生重复但是最终在消息队列存储时只会存储一份。 它的做法是给每一个生产者一个唯一的ID并且为生产的每一条消息赋予一个唯一ID消息队列的服务端会存储生产者ID最后一条消息ID的映射。当某一个生产者产生新的消息时消息队列服务端会比对消息ID是否与存储的最后一条ID一致如果一致就认为是重复的消息服务端会自动丢弃。 消费端幂等 解决1在生产时定义一个全局的唯一id在消费端判断id是否被处理过。 解决2数据库增加版本字段执行sql时会有乐观锁。
三、减少消息延迟的方式
优化消费端耗时逻辑。增加消费者数量在kafka中一个partition只能被一个消费者消费所以单纯增加消费者数量对kafka来说是无用的可以增加partition。