一句话消息中间件

  • 为什么?
  1. 一句话消息中间件
  2. 应用解耦,不管是程序还是模块之间,使用消息中间件进行间接通信。

    异步通信,使得子系统之间得以充分执行自己的逻辑而无需等待。

    流量削峰(缓冲),消息中间件像是一个巨大的蓄水池,将高峰期大量的请求存储下来慢慢交给后台进行处理,对于秒杀业务来说尤为重要。

  3. 一句话消息中间件

  4. 一句话消息中间件

  5. 如果消息达到无人订阅的队列会怎么办?消息会一直在队列中等待,RabbitMq默认队列是无限长度的。

    多个消费者订阅到同一队列怎么办?消息以循环的方式发送给消费者,每个消息只会发送给一个消费者。

    消息路由到了不存在的队列怎么办?一般情况下,凉拌,RabbitMq会忽略,当这个消息不存在,也就是这消息丢了。

    消息是如何确认的?消费者在声明队列时,可以指定autoAck参数true为自动确认,当autoAck=false时,如果服务器端一直没有收到消费者的ack信号,并且消费此消息的消费者已经断开连接,则服务器端会安排该消息重新进入队列,等待投递给下一个消费者(也可能还是原来的那个消费者)。

  6. 消息的持久化:默认情况下,队列和交换器在服务器重启后都会消失,消息当然也是。将队列和交换器的durable属性设为true,缺省为false,但是消息要持久化还不够,还需要将消息在发布前,将投递模式设置为2。消息要持久化,必须要有持久化的队列、交换器和投递模式都为2。

  7. 再均衡对Kafka很重要,这是消费者群组带来高可用性和伸缩性的关键所在。不过一般情况下,尽量减少再均衡,因为再均衡期间,消费者是无法读取消息的,会造成整个群组一小段时间的不可用

    KafkaProducer的实现是线程安全的,所以我们可以在多线程的环境下,安全的使用KafkaProducer的实例,KafkaConsumer的实现不是线程安全的,所以我们在多线程的环境下,使用KafkaConsumer的实例要小心,应该每个消费数据的线程拥有自己的KafkaConsumer实例。

  8. 一句话消息中间件

  9. 一句话消息中间件

  10. Kafka速度的秘诀在于,它把所有的消息都变成一个批量的文件,并且进行合理的批量压缩,减少网络IO损耗,通过mmap(现代操作系统分页存储来利用内存提高I/O效率)提高I/O速度,写入数据的时候由于单个Partion是末尾添加(顺序写入)所以速度最优;读取数据的时候配合sendfile(零拷贝)直接暴力输出。

  11. 一句话消息中间件

  12. 一句话消息中间件