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重复消费、幂等)相关推荐

  1. redis的主从同步及高可用集群

    redis 是一个高性能的 key-value 数据库. redis 的出现,很大程度补偿了 memcached 这类 keyvalue 存储的不足,在部分场合可以对关系数据库起到很 好的补充作用.它 ...

  2. centos7/redhat7 PostgreSql搭建主从同步+Keepalived高可用 数据库高可用

    一.安装postgresql 此次安装版本为postgresql11.6,因已提前准备好安装所需的RPM包,所以使用RPM形式安装. 1.rpm包安装: mkdir /tmp/pgsql && ...

  3. Kafka基于Zookeeper搭建高可用集群实战

    Kafka基于Zookeeper搭建高可用集群实战 1 前言 1.1 高可用的由来 为何需要Replication? 在Kafka在0.8以前的版本中,是没有Replication的,一旦某一个Bro ...

  4. 18_clickhouse副本同步与高可用功能验证,分布式表与集群配置,数据副本与复制表,ZooKeeper整合,创建复制表,副本同步机制,数据原子写入与去重,负载平衡策略,案例(学习笔记)

    24.副本同步与高可用功能验证 24.1.分布式表与集群配置 24.2.数据副本与复制表 24.3.ZooKeeper整合 24.4.创建复制表 24.5.副本同步机制 24.6.数据原子写入与去重 ...

  5. 消息系统kafka之二 kafka的HA(高可用)

    在前面的<消息系统kafka之一 系统简介>的为什么选择kafka中已经提到了kafka高可用的特性. 下面是kafka与其他消息系统之间的区别 可以看出,kafka支持持久化消息,消息回 ...

  6. Apache shiro集群实现 (六)分布式集群系统下的高可用session解决方案---Session共享

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  7. 实现Kubernetes跨集群服务应用的高可用

    我们在进行生产环境部署时得到的一个明确的需求,是Kubernetes用户希望服务部署能够zone.跨区域.跨集群甚至跨云边界(译者:如跨云供应商).相比单集群多zone部署,跨集群服务提供按地域分布, ...

  8. MHA-结合MySQL半同步复制高可用集群(Centos7)

    目录 一.理论概述 本案例部署思路 二.环境 三.部署 部署MHA 部署二进制包MySQL及部署主从复制 部署半同步复制 配置MHA MHA测试 部署lvs+keepalived(lvs1,lvs2) ...

  9. mysql keepalived主主同步_KEEPALIVED+MYSQL主主同步=MYSQL高可用(HA)集群

    1.这个环境最大的缺陷在于主机写入速度极慢,主键重复. 2.mysql最好采用5.6以上集群版本,5.5以下单线程版本不大适合.博客中的mysql为5.5,实际测试挺差的,换成5.6之后十分完美,请各 ...

最新文章

  1. [WARNING] unable to add QUERY_STRING=XXXX to uwsgi packet, consider increasing buffer size
  2. JetBrains PyCharm 2018.2.5 x64永久激活教程
  3. node 多进程 vs java_node多进程服务器
  4. 【常用模板】 01背包
  5. java 构造器(constructor)
  6. mysql第二章_第二章 初识MySQL
  7. 【前端干货】CSS 的空格处理
  8. 总结const、readonly、static三者的区别【收藏、转载】20190614
  9. PowerShell在Exchange2010下快速开启邮箱[续]
  10. NWT创业失败原因之层层分析
  11. Failed to start The nginx HTTP and reverse proxy server.
  12. 传统机器学习和深度神经网络对比
  13. 《从零开始的 RPG 游戏制作教程》第八期:对话、按钮、变量、马甲
  14. 前端播放flv的视频
  15. 13.5 Prepared Statements
  16. adb inputswipe shell_[Android]通过adb shell input上报命令模拟屏幕点击事件【转】
  17. 腾讯云商用密码合规解决方案,亮相2021商用密码应用创新高端研讨会
  18. 青少年软件编程C++一级题库(31-40)
  19. sendToTarget与sendMessage
  20. Mac--键盘输入的技巧

热门文章

  1. python字典和集合对象可以进行索引_Python字典和集合
  2. python图片解析库_python用来获得图片exif信息的库实例分析
  3. 震惊!原来现在无所不能的世界主人翁,早已在三千年前就悄然出现!
  4. linux连接建立的时间,用timedatectl在Linux中检查当前时区及更改时区(创建符号链接来更改时区)...
  5. 面试避坑手册之 Java字节流和字符流总结IO流!
  6. mysql设计表月份_mysql,表设计
  7. 每天的0点php,使用strtotime,这个月的第一天凌晨0点在PHP?(Using just strtotime, 0 am first day of this month in PHP?)...
  8. 数据结构——二叉树的最长路径问题
  9. leetcode669. 修剪二叉搜索树
  10. leetcode27:移除元素(暴力+双指针)