消息中间件的学习,RabbitMQ,Kfaka

  1. 消息传递模式:

    • 点对点模式(Point-to-Point):一个消息只能被一个消费者接收。
    • 发布/订阅模式(Publish/Subscribe):一个消息可以被多个消费者接收。
  2. 消息队列:

    • 用于存储待发送的消息。
    • 提供消息的入队和出队操作。
    • 可以支持多种消息存储方式,如内存、磁盘等。
  3. 消息持久化:

    • 确保消息在中间件故障或重启后不会丢失。
    • 可以将消息存储在磁盘或其他持久存储介质中。
  4. 可靠性保证:

    • 消息确认机制:消费者在处理完消息后向中间件发送确认,确保消息被正确处理。
    • 消息重发机制:如果消息发送失败或未得到确认,中间件会自动重发消息。
  5. 高可用性:

    • 集群部署:通过多个中间件节点组成集群,提高系统的可用性和容错性。
    • 故障转移:当某个节点故障时,其他节点可以接管消息的处理。
  6. 性能优化:

    • 消息压缩:减少消息的传输和存储开销。
    • 批量处理:将多个消息合并成一批进行处理,提高效率。
    • 异步处理:允许发送者和接收者在不同的时间处理消息,提高系统的并发性能。
  7. 常见的消息中间件:

    • RabbitMQ:支持多种消息传递模式,具有良好的可靠性和扩展性。
    • Kafka:高吞吐量的分布式消息中间件,适用于大数据处理场景。
    • ActiveMQ:成熟的开源消息中间件,支持多种协议。
    • RocketMQ:阿里巴巴开源的消息中间件,具有高性能和高可靠性。
  8. 应用场景:

    • 系统集成:不同系统之间通过消息中间件进行通信和数据交换。
    • 异步处理:将耗时的操作异步化,提高系统的响应速度。
    • 流量削峰:在高并发场景下,通过消息中间件来缓冲请求,避免系统崩溃。
    • 分布式事务:通过消息中间件来实现分布式事务的最终一致性。
  9. 消息格式:

    • 常见的消息格式包括文本、JSON、二进制等。
    • 中间件通常提供消息的序列化和反序列化功能,以方便消息的传输和存储。

 

1. **RabbitMQ**:

- **如何保证消息不丢失**:从生产者、队列和消费者三个层面考虑,包括开启生产者确认机制、持久化功能和消费者确认机制,并设置重试次数,将失败消息投递到异常交换机交由人工处理。

- **消息的重复消费问题如何解决**:通过查询数据库判断业务唯一标识是否已存在,若不存在则处理消息,否则说明重复消费,无需再处理。还可以使用redis分布式锁、数据库的锁等解决幂等问题。

- **死信交换机**:延迟队列使用死信交换机和TTL(消息存活时间)实现,若消息超时未消费变成死信,队列可绑定死信交换机,死信交换机上可绑定其他队列,发送消息时可指定TTL时间实现延迟队列功能。还可安装死信插件更方便实现。

- **100万消息堆积的解决方法**:提高消费者消费能力(多线程消费任务)、增加更多消费者、扩大队列容积(使用RabbitMQ惰性队列)。

- **高可用机制**:生产环境使用镜像模式集群,镜像队列结构一主多从,主节点完成所有操作并同步给镜像节点,主节点宕机后镜像节点可替代,但主从同步完成前主节点宕机可能出现数据丢失,可采用仲裁队列解决,仲裁队列与镜像队列类似,主从同步基于Raft协议,强一致,声明队列时指定即可。

2. **Kafka**:

- **如何保证消息不丢失**:生产者发送消息时使用异步回调发送并设置重试,broker中通过复制机制确保消息不丢失(设置acks为all,确保所有副本保存确认后才算成功发送),消费者端禁用自动提交偏移量改为手动提交,消费成功后报告给broker消费位置。

- **消息的重复消费问题如何解决**:禁用消费者自动按期提交偏移量,改为手动提交,当消费成功后再报告给broker消费的位置;设置唯一主键或加锁(数据库锁或redis分布式锁)解决幂等问题。

- **如何保证消费的顺序性**:把消息存储在同一个分区下,可通过发送消息时指定分区号或按照相同业务设置相同key(默认根据key的hashcode值选择分区)来实现。

- **高可用机制**:集群由多个broker实例组成,某一台宕机不影响其他broker服务;复制机制保证高可用,一个topic有多个分区,每个分区有多个副本,有一个leader,其余为follower,副本存储在不同broker中,所有分区副本内容相同,leader故障时从ISR副本列表中选取一个作为leader,ISR副本与leader副本同步保存数据。

- **解释复制机制中的ISR**:ISR是in - sync replica的缩写,指与leader副本同步保存数据的follower副本,分区副本中的follower分为ISR和普通副本,leader挂掉后优先从ISR副本列表中选取leader,因为ISR数据更完整。

- **数据清理机制**:Kafka中topic的数据存储在分区上,分区文件过大时分段存储segment,每个分段以索引和日志文件形式存储在磁盘上。提供两个日志清理策略,根据消息保留时间(默认168小时)或topic存储数据大小(默认关闭)进行清理,可通过broker中的配置文件设置。

- **实现高性能的设计**:包括消息分区、顺序读写、页缓存、零拷贝、消息压缩、分批发送等方面,不受单台服务器限制,顺序读写提升效率,利用页缓存和零拷贝减少磁盘和网络访问,消息压缩减少IO,分批发送减少网络开销。

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值