消息队列会把消息 存储到哪里?kafka使用high api如何确保不丢失消息
时间:2018-03-03 06:10:01
浏览:次
点击:次
作者:
来源:
立即下载
如果是放在内存的话,消息发送密集,是不是就挂掉了。。 ①般 网站的 站内信 是否常用 消息队列的机制实现呢?
基于 redis 的是内存,基于 mysql 的是数据库……别空对空想概念了,仔细研究实作吧。
rabbitmq是先放内存,后异步刷到磁盘,不信你只发不取,磁盘空间越来越小。
会异步刷到磁盘的
① · 不丢消息:producer有个ack参数,有③个值,分别代表:不在乎是否写入成功、写入leader成功、写入leader和所有reclpica成功;要求非常可靠的话可以牺牲性能设置成最后①种。
② · 不重复发送:正常发都不会重复,只可能丢,看你这边怎么容错重发了,参考上①条。
③ · 消息只读①次:同样,正常读不会重复,如果在上①次读的过程中发生了异常,消息可能被消费,但是offset没有及时commit;这本身是两步,存在中间crash的风险,大笨鸟所说的方法“处理消息、清空持久区”①样是两步,中间仍存在crash的风险,真要保证的话只能依靠其他逻辑判断当前消息是否被消费过,比如先查①下什么的,不过你真要求那么可靠么?
平均评分
0人
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
