MQ问题集(kafka主从同步与高可用,MQ重复消费、幂等)
1、kafka主从同步与高可用
https://1028826685.iteye.com/blog/2354570
http://developer.51cto.com/art/201808/581538.htm
2、MQ有可能发生重复消费,如何避免,如何做到幂等
2.1 MQ消息发送
1、发送端MQ-client(消息生产者:Producer)将消息发送给MQ-server;
2、MQ-server将消息落地;
3、MQ-server回ACK给MQ-client(Producer);
4、MQ-server将消息发送给消息接受端MQ-client(消息消费者:Customer);
5、MQ-client(Customer)消费接受到消息后发送ACK给MQ-server;
6、MQ-server将落地消息删除
2.2 消息重复发送原因
为了保证消息必达,MQ使用了消息超时、重传、确认机制。使得消息可能被重复发送,如上图中,由于网络不可达原因:3和5中断,可能导致消息重发。消息生产者a收不到MQ-server的ACK,重复向MQ-server发送消息。MQ-server收不到消息消费者c的ACK,重复向消息消费者c发消息。
2.3 消息重复发送产生的后果
举个例子:购买会员卡,上游支付系统负责给用户扣款,下游系统负责给用户发卡,通过MQ异步通知。不管是上半场的ACK丢失,导致MQ收到重复的消息,还是下半场ACK丢失,导致购卡系统收到重复的购卡通知,都可能出现,上游扣了一次钱,下游发了多张卡。
2.4 MQ内部如何做到幂等性的
对于每条消息,MQ内部生成一个全局唯一、与业务无关的消息ID:inner-msg-id。当MQ-server接收到消息时,先根据inner-msg-id判断消息是否重复发送,再决定是否将消息落地到DB中。这样,有了这个inner-msg-id作为去重的依据就能保证一条消息只能一次落地到DB。
2.5 消息消费者应当如何做到幂等性
1、对于非幂等性业务且要求实现幂等性业务:生成一个唯一ID标记每一条消息,将消息处理成功和去重日志通过事务的形式写入去重表。
2、对于非幂等性业务可不实现幂等性的业务:权衡去重所花的代价决定是否需要实现幂等性,如:购物会员卡成功,向用户发送通知短信,发送一次或者多次影响不大。不做幂等性可以省掉写去重日志的操作。
MQ问题集(kafka主从同步与高可用,MQ重复消费、幂等)相关推荐
- redis的主从同步及高可用集群
redis 是一个高性能的 key-value 数据库. redis 的出现,很大程度补偿了 memcached 这类 keyvalue 存储的不足,在部分场合可以对关系数据库起到很 好的补充作用.它 ...
- centos7/redhat7 PostgreSql搭建主从同步+Keepalived高可用 数据库高可用
一.安装postgresql 此次安装版本为postgresql11.6,因已提前准备好安装所需的RPM包,所以使用RPM形式安装. 1.rpm包安装: mkdir /tmp/pgsql && ...
- Kafka基于Zookeeper搭建高可用集群实战
Kafka基于Zookeeper搭建高可用集群实战 1 前言 1.1 高可用的由来 为何需要Replication? 在Kafka在0.8以前的版本中,是没有Replication的,一旦某一个Bro ...
- 18_clickhouse副本同步与高可用功能验证,分布式表与集群配置,数据副本与复制表,ZooKeeper整合,创建复制表,副本同步机制,数据原子写入与去重,负载平衡策略,案例(学习笔记)
24.副本同步与高可用功能验证 24.1.分布式表与集群配置 24.2.数据副本与复制表 24.3.ZooKeeper整合 24.4.创建复制表 24.5.副本同步机制 24.6.数据原子写入与去重 ...
- 消息系统kafka之二 kafka的HA(高可用)
在前面的<消息系统kafka之一 系统简介>的为什么选择kafka中已经提到了kafka高可用的特性. 下面是kafka与其他消息系统之间的区别 可以看出,kafka支持持久化消息,消息回 ...
- Apache shiro集群实现 (六)分布式集群系统下的高可用session解决方案---Session共享
Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...
- 实现Kubernetes跨集群服务应用的高可用
我们在进行生产环境部署时得到的一个明确的需求,是Kubernetes用户希望服务部署能够zone.跨区域.跨集群甚至跨云边界(译者:如跨云供应商).相比单集群多zone部署,跨集群服务提供按地域分布, ...
- MHA-结合MySQL半同步复制高可用集群(Centos7)
目录 一.理论概述 本案例部署思路 二.环境 三.部署 部署MHA 部署二进制包MySQL及部署主从复制 部署半同步复制 配置MHA MHA测试 部署lvs+keepalived(lvs1,lvs2) ...
- mysql keepalived主主同步_KEEPALIVED+MYSQL主主同步=MYSQL高可用(HA)集群
1.这个环境最大的缺陷在于主机写入速度极慢,主键重复. 2.mysql最好采用5.6以上集群版本,5.5以下单线程版本不大适合.博客中的mysql为5.5,实际测试挺差的,换成5.6之后十分完美,请各 ...
最新文章
- [WARNING] unable to add QUERY_STRING=XXXX to uwsgi packet, consider increasing buffer size
- JetBrains PyCharm 2018.2.5 x64永久激活教程
- node 多进程 vs java_node多进程服务器
- 【常用模板】 01背包
- java 构造器(constructor)
- mysql第二章_第二章 初识MySQL
- 【前端干货】CSS 的空格处理
- 总结const、readonly、static三者的区别【收藏、转载】20190614
- PowerShell在Exchange2010下快速开启邮箱[续]
- NWT创业失败原因之层层分析
- Failed to start The nginx HTTP and reverse proxy server.
- 传统机器学习和深度神经网络对比
- 《从零开始的 RPG 游戏制作教程》第八期:对话、按钮、变量、马甲
- 前端播放flv的视频
- 13.5 Prepared Statements
- adb inputswipe shell_[Android]通过adb shell input上报命令模拟屏幕点击事件【转】
- 腾讯云商用密码合规解决方案,亮相2021商用密码应用创新高端研讨会
- 青少年软件编程C++一级题库(31-40)
- sendToTarget与sendMessage
- Mac--键盘输入的技巧
热门文章
- python字典和集合对象可以进行索引_Python字典和集合
- python图片解析库_python用来获得图片exif信息的库实例分析
- 震惊!原来现在无所不能的世界主人翁,早已在三千年前就悄然出现!
- linux连接建立的时间,用timedatectl在Linux中检查当前时区及更改时区(创建符号链接来更改时区)...
- 面试避坑手册之 Java字节流和字符流总结IO流!
- mysql设计表月份_mysql,表设计
- 每天的0点php,使用strtotime,这个月的第一天凌晨0点在PHP?(Using just strtotime, 0 am first day of this month in PHP?)...
- 数据结构——二叉树的最长路径问题
- leetcode669. 修剪二叉搜索树
- leetcode27:移除元素(暴力+双指针)