余姚做网站,重庆公司注册时间,网站建设公司ejiew,菜单设计制作图片前言
消息队列. 不论是Java内部提供的LinkedBlockingQueue, 还是当下主流的中间件RabbitMQ, Kafka, RockMQ. 其本质上都是一个削峰填谷的工具.
我们都知道, 请求和流量都有可能瞬间很高, 或者很低. 所以, 很多时候, 我们需要请求存储起来, 或者使用异步的方式, 来匀速的处理过… 前言
消息队列. 不论是Java内部提供的LinkedBlockingQueue, 还是当下主流的中间件RabbitMQ, Kafka, RockMQ. 其本质上都是一个削峰填谷的工具.
我们都知道, 请求和流量都有可能瞬间很高, 或者很低. 所以, 很多时候, 我们需要请求存储起来, 或者使用异步的方式, 来匀速的处理过量的请求. 问题
问题-基础
什么是消息队列? 消息队列有什么作用? 你常用的消息队列有哪些?
问题-特性问题 如何保证消息队列消息不丢失? 如何保证消息集群的高可用性? 如何保证消息不重复消费? 如何保证消息的幂等性? 如何实现延迟消息队列, 类似DelayQueue? 消息存在失效时间如何处理这部分类型的消息? 如何保证消息的顺序性? 全局顺序性 or 局部顺序性?
问题-Kafka 聊聊Kafka的基本架构? Kafka 为何性能效率那么高?
问题-场景问题 如何解决开发过程中等等消息积压问题? 消息队列是否可以作为分布式事务的解决方案? 如何进行处理? 回答
问题-基础
什么是消息队列? 消息队列有什么作用? 你常用的消息队列有哪些?
消息队列是一个队列. 主要用于削峰填谷. 缓解即时流量瞬发. 可以使整体请求处理匀速进行.(漏斗限流算法)消息队列有JDK原生的Queue之外, 还有一些第三方消息队列框架. RabbitMQ RocketMQ Kafka.
问题-特性问题
如何保证消息队列消息不丢失?
消息不丢失需要从, 发送端, 服务端, 消费端.
发送端. Kafka 消息发送有ISR. -1, 1, 2. 这3种模式. 要求限制高的消息需要设置为-1, 且需要设置重发策略.服务端. 服务端Linux操作系统, 需要将内存数据落盘. 脏页. / RabbitMQ是内存的, 无法落盘.消费端. 消息事务成功后, 在进行消息消费的提交操作. 不要AutoCommit, 需要手动Commit.
如何保证消息集群的高可用性?
服务端.去中心化思想. 将一个Topic进行分片, 将其中心调度节点均匀分布多个节点.消费端. 消费端-负载均衡. 如何保证消息不重复消费? 如何保证消息的幂等性? 如何实现消息的精准一次消费? 1.2.3点和前面消息不丢失一致. 幂等操作, 消息去重, 乐观锁 MVCC. (个人不是特别认可) 如何实现延迟消息队列, 类似DelayQueue?
RocketMQ 可以设置延时队列. 时间轮, 定时调度.
消息存在失效时间如何处理这部分类型的消息?
RabbitMQ 死信队列.RocketMQ 延时队列. 设置延时检查和取消的检查的消息, 触发检查机制.
如何保证消息的顺序性? 全局顺序性 or 局部顺序性?
全局顺序. 单节点. 数据不要分片, 使用一个分区.局部顺序. 消息设置正确的发送路由算法, 消费设置正确的消费算法.
问题-Kafka
聊聊Kafka的基本架构?
Broker. Topic. Partition.Leader. Follower.Producer, Server, Consumer.物理文件映射. index, log.
Kafka 为何性能效率那么高?
mmap. 内存映射. 系统内存映射, 无需socket流相互转换. 内核和用户进行相互切换.Netty的select, epoll的网络IO交互模型.顺序读写. 内存块预分配. 128M硬盘空间.
问题-场景问题
如何解决开发过程中等等消息积压问题?
部门沟通. 先发现当前是上游, 下游, 自身问题. 消费加速时, 需要通知依赖部门, 防止其他服务宕机.加速消费. Topic多分片, 或者新建Topic, 多分片. 起多个Consumer加速消费.
消息队列是否可以作为分布式事务的解决方案? 如何进行处理?
RocketMQ 在4.0版本实现了分布式事务的解决方案. 2PC模式.