Kafka 2019-11-04
Kafka是一种消息中间件,首先我们看看什么是消息中间件、消息中间件可以解决什么问题,然后我们对比不同的消息中间件,总结Kafka适用的场景。
中间件位于系统软件和应用软件之间的部分,起到连接系统各部分。消息中间件是用于接收消息,并且将消息传递给需要消息的软件系统。
1. 削峰 诸如双十一零点时淘宝的数据量陡增,服务器会承担极大的压力。我们不能以在数据量最大的时候所需要的资源数来配置资源,那样除了在某一段时间或某一刻数据量非常大,其他时间数据量都很小,会浪费很多资源。
2. 异步处理 为了实现快速响应用户,我们可以先完成必须的工作,而不必等待所有的工作做完。通常像通过邮件发送用户手册的任务可以稍后再做。
3. 解耦 多个系统为了减少相互依赖性,避免一个系统的改动引起其他系统的改动,可以使用消息中间件来达到目的。那么为什么使用消息中间件可以起到解耦的作用呢?
我们首先需要知道什么是耦合,耦合是指系统之间的依赖,比如A系统以来与B系统提供的接口。耦合分为7类,我们最常见的是数据耦合和标记耦合,耦合的7种种类可以参考图解7种耦合关系
使用消息中间件作为中介之后,调用方和被调用方的依赖情况发生了一下的变化:
a. 调用方不需要知道被调用方的接口名和参数,只需要将数据发送给消息中间件。
b. 被调用系统参数的错误或者进程挂掉不会是调用方产生错误。
也就是调用方和被调用方的依赖关系装换为了调用方与消息中间件,消息中间件和被调用方的依赖关系。但是消息中间件的接口通常不会变化并且接口比较统一,所以耦合度就降低了。
目前主流的消息中间件有Apache的ActiveMQ,LinkedIn开发的Kafka(现已捐赠给Apache),阿里的RocketMQ。它们都各具特点,那么我们在选择消息中间件的时候应该怎么选择呢?
主要从两点来判断:1、是性能。2、特性。
性能部分我们可以参考阿里中间件团队的博客Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能
未完待续