zoukankan      html  css  js  c++  java
  • 消息队列之常见问题

    一、消息队列

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

    1.1 kafka的高可用性

    HA机制,就是Replication副本机制。只能读写leader。

    多副本 -> leader & follower -> broker挂了重新选举leader即可对外服务。

    2.如何保证消息不被重复消费(幂等性)?

     幂等性:通俗点说,就一个数据,或者一个请求,给你重复来多次,你得确保对应的数据是不会改变的,不能出错。

     可以基于数据库的唯一键来保证重复数据不会重复插入多条。

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

      分析生产者、消息队列和消费者哪个环节造成了消息丢失,然后解决。

      kafka消费端丢失:kafka会自动提交offset,那么只要关闭自动提交offset,在处理完之后自己手动提交offset,就可以保证数据不会丢。但是此时确实还是会重复消费,比如你刚处    理完,还没提交offset,结果自己挂了,此时肯定会重复消费一次,自己保证幂等性就好了。

      解决方案:关闭自动更新offset,等到数据被处理后再手动跟新offset。
      在消费前做验证前拿取的数据是否是接着上回消费的数据,不正确则return先行处理排错。
      一般来说zookeeper只要稳定的情况下记录的offset是没有问题,除非是多个consumer group 同时消费一个分区的数据,其中一个先提交了,另一个就丢失了。

    4.如何保证消息的顺序性?

      1)rabbitmq:拆分多个queue,每个queue一个consumer,就是多一些queue而已,确实是麻烦点;或者就一个queue但是对应一个consumer,然后这个consumer内部用内存队列做排队,然后分发给底层不同的worker来处理。

     2)kafka:一个topic,一个partition,一个consumer,内部单线程消费,写N个内存queue,然后N个线程分别消费一个内存queue即可。

    5.如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,怎么解决?

       恢复消费端。

    6.如果让你写一个消息队列,该如何进行架构设计啊?

      参照kafka:broker -> topic -> partition

     7.Kafka吞吐量高的原因?

     Kafka快的原因是他将一个个消息变成一个文件,通过mmp提高IO速度,写入时在末尾直接添加,读取时通过偏移量直接返回。

  • 相关阅读:
    书决战.NET——ASP.NET AJAX与Silverlight实战手册(含光的评论
    C#和.NET 3.0第一步——适用Visual Studio 2005与Visual Studio 这本书怎么样
    Visual Basic.NET 2008控件使用范例详解这本书怎么样
    书C#2005 &.NET 3.0高级编程(第5版)(上、下卷)的评论
    关于Visual J#.NET应用程序设计(高等学校计算机科学与技术教材)的读后感
    Dos命令
    调整markdown 图片大小和对齐方式
    Intellij IDEA设置自定义类描述信息
    Markdown基本语法
    计算机的发展史(待补充)
  • 原文地址:https://www.cnblogs.com/wenxiangchen/p/11276590.html
Copyright © 2011-2022 走看看