Java面试必考点--第09讲(上):消息队列Kafka架构与原理

本课时主要讲解消息队列与数据库相关的知识,重点讲解三部分知识点:

  1. Kafka 的架构与消息交互流程;

  2. 数据库事务的 4 大特性和分类;

  3. MySQL 相关的内容,比如索引、MySQL 调优等。

消息队列与数据库知识点

先来看看相关知识点汇总,如下图。首先为了防止歧义进行说明,本课时中提到的“队列“就是指“消息队列“。

消息队列

来看消息队列的应用场景,也就是队列能解决哪些问题。

  • 队列可以对应用进行解耦合,应用之间不用直接调用。

  • 可以通过队列来传递消息,完成通信。

  • 队列也可以用来执行异步任务,任务提交方无需等待结果。

  • 队列的另一个作用是削峰填谷,在突发流量时,可以通过队列做缓冲,不会对后端服务产生较大压力,当峰值过去时,可以逐渐消费堆积的数据,填平流量低谷。

  • 消息队列一般还提供了一写多读的能力,可以用来做消息的多播与广播。

关于队列还需要知道两个主要的消息协议。

  • JMS 是 Java 的消息服务,规定了 Java 使用消息服务的 API,在前面 Spring 的课时提到过,Spring 提供了支持 JMS 的组件。

  • AMQP 是高级消息队列协议,是应用层协议的一个开放标准,AMQP 不从 API 层进行限定,而是直接定义网络交换的数据格式,因此支持跨语言的能力,例如 RabbitMQ 就使用了 AMQP 实现。

再来对比几个常用的消息队列。

  • RabbitMQ

使用 Erlang 开发的开源消息队列,通过 Erlang 的 Actor 模型实现了数据的稳定可靠传输。支持 AMQP、XMPP、SMTP 等多种协议,因此也比较重量级。由于采用 Broker 代理架构,发送给客户端时先在中心队列排队,疑似 RabbitMQ 的单机吞吐量在万级,不算很高。

  • ActiveMQ

可以部署于代理模式和 P2P 模式,支持多种协议,单机吞吐量在万级,但是 ActiveMQ 不够轻巧,对于队列较多的情况支持不是很好。并且有较低概率丢失消息。

  • RocketMQ

阿里开源的消息中间件,单机能够支持 10w 级的吞吐量,使用 Java 开发,具有高吞吐量、高可用性的特点、适合在大规模分布式系统中应用。

  • Kafka

由 Scala 开发的高性能跨语言分布式消息队列,单机吞吐量可以到达 10w 级,消息延迟在 ms 级。Kafka 是完全的分布式系统,Broker、Producer、Consumer 都原生自动支持分布式,依赖于 ZooKeeper 做分布式协调。Kafka 支持一写多读,消息可以被多个客户端消费,消息有可能会重复,但是不会丢失。本课时后面会对 Kafka 的架构进行详细介绍。

数据库中间件

数据库中间件一般提供了读写分离、数据库水平扩展的能力。下面主要介绍两个中间件。

一是 Sharding-Sphere,它是一个开源的分布式数据库中间件解决方案,由 Sharding-JDBC、Sharding-Proxy、Sharding-

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值