笔记速览:消息队列的问题

探讨Kafka消息队列的高可用性保障机制,包括HA机制、replica副本、isr及leader故障处理策略。分析消息重复消费与丢失问题,提出幂等性机制与数据可靠性传输解决方案。涵盖消息队列的顺序执行、积压处理及架构设计思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结自:中华石衫

如何保证消息队列的高可用啊?

缺点:
	* 导致系统可用性降低
	
就Kafka来说:
	* HA机制,就是replica副本机制
	* isr
	* leader 挂了咋办? broker挂了咋办?  controller挂了咋办?

消息队列重复消费?如何保证消息不被重复消费啊(如何保证消息消费时的幂等性)

* 原因 :任务重启,offset提交有间隔,导致部分数据被重复消费
* 措施 :消息队列不保证重复数据,所以要开发一套 幂等性 机制
	* 如果 是 redis,不用考虑,因为 redis 天然幂等性
	* 业务上 每条数据 都生成唯一的id,每次处理数据的时候去缓存(内存、redis)中查,看有没有处理过

如何保证消息的可靠性传输(如何处理消息丢失的问题)?

* 生产者弄丢了数据
	ack=all,一定不会丢
	
* Kafka 服务端丢数据(crash)

	kafka的leader机器宕机了,将follower切换为leader之后,发现数据丢了
	
	下面四个参数必须保证:
		kafka服务端 	replication.factor :这个值必须大于1,要求每个partition必须有至少2个副本
		kafka服务端		min.insync.replicas :这个值必须大于1,这个是要求一个leader至少感知到有至少一个follower还跟自己保持联系,没掉队,这样才能确保leader挂了还有一个follower
		producer端		acks=all:这个是要求每条数据,必须是写入所有replica之后,才能认为是写成功了
		producer端		retries=MAX:这个是要求一旦写入失败,就无限重试,卡在这里了

* 消费端弄丢了数据
	原因:kafka只有一种可能:offset自动提交,但是处理数据的时候Consumer挂了,那消息就丢了
	解决:关闭 kafka offset 自动提交,在处理完数据的时候提交。针对此时 Consumer 挂了会出现重复消费的情况,用幂等性保证

如果保证从队列里拿到的数据按顺序执行?就Kafka来说

* partition 里的数据肯定有序,kafka 不保证 多个 partition 里数据的有序性
* partition - consumer 一一对应,如果 Kafka Consumer 单线程 消费 + 处理,可能会影响 消费速度
* 当 Consumer 只负责 取数据,取完数据丢 queue 里面,处理线程从 queue 里面取数据处理,可加快速度(queue可以有多个,queue - 处理线程 一一对应)
* 此时 要将 需要 有序的数据,放在 同一个queue 里面

大量消息在mq里积压了几个小时了还没解决?

-- 临时紧急扩容

数据会大量积压在mq里,而是大量的数据会直接搞丢?

-- TTL 尽量不要设
-- 手动写程序,补数据

走的方式是消息积压在mq里,那么如果你很长时间都没处理掉,此时导致mq都快写满了,咋办?

-- 消费到的数据就扔,达到快速消费目的
-- 消费到的数据就存(数据迁移系统),后期补数据

如果让你写一个消息队列,该如何进行架构设计啊?思路是什么?

关键点:
	* 基本功能
	
		生产者消费者,维护队列
		
	* 支持伸缩性:在需要的时候进行扩容
	
		参照 Kafka 分布式系统,broker -> topic -> partition,每个 partition 分布在不同的机器上,只存一部分数据。
		
		资源不够则 增加 partition,增加机器
		
	* 数据持久化
		
		顺序落盘,提高磁盘读写性能; index 和 log 文件,加快 速度
		
	* 可用性,HA
		
		replication , leader 挂了咋办? broker挂了咋办?  controller挂了咋办?
		
	* 支持数据零丢失方案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值