消息中间件/消息总线/消息队列

一、总论:消息中间件的三大作用:系统解耦、异步处理、流量削峰。
1、异步处理:解决串行和单纯并行,但是这样做也有弊端,比如注册实际是失败了,但是已经显示注册完成!
消息中间件/消息总线/消息队列_第1张图片
2、系统解耦:写死接口导致的问题不用多说吧,并且导致分布式系统无法解决高并发(不准确)
3、流量消峰:也称限流,在秒杀等业务中为防止流量突增冲垮系统,会使用消息中间件使做排队处理,用降低用户体验度的方式保证系统的安全。
二、此处介绍我是用过的两种mq:activemq和kafka
1、activemq:
2、kafka:使用场景:高吞吐。
高速:Kafka的速度最高可以达到每秒十万条数据,并且还能持久化存储,特别适合大数据条件下的storm流式消息的使用。比如使用flume采集数据(系统日志或者埋点日志等)发送至kafka。。//todo
在集群中,使用分布式Kafka保证其高可用和高并发使用partition分区
消息中间件/消息总线/消息队列_第2张图片

  1. 零拷贝技术(与传统拷贝技术相比不需要内核buffer缓存,减少两次copy。linux和netty中同样使用)使得,取消缓冲区,顺序写磁盘,因此效率非常高。
  2. 批量压缩技术:在很多情况下,系统的瓶颈不是CPU或磁盘,而是网络带宽,对于需要在广域网上的数据中心之间发送消息的数据流水线尤其如此。所以数据压缩就很重要。可以每个消息都压缩,但是压缩率相对很低。所以KAFKA使用了批量压缩,即将多个消息一起压缩而不是单个消息压缩。KAFKA允许使用递归的消息集合,批量的消息可以通过压缩的形式传输并且在日志中也可以保持压缩格式,直到被消费者解压缩。

你可能感兴趣的:(java)