第二章:Kafka 一个发布与订阅消息系统(概念篇)

作者:pany

时间:2019-3-3 21:36

参考:Kafka 权威指南(Kafka :The Definitive Guide)

注:如果网上找不到这本书的资源,可以联系我,免费分享。微信:py1149050048

@all 转载请注明出处

章节概要

本文主要讲解Kafka的诞生背景和解决了什么问题,主要章节如下:

           1、发布与订阅消息模式

           2、为什么我们需要使用发布与订阅系统

一、发布与订阅消息系统

首先正式去介绍Kafka之前,我们先来介绍下发布与订阅消息系统,因为Kafka就是一个基于发布和订阅消息系统。

而在说道发布和订阅消息模式时,我们又不得不提JMS(Java Message Service),它是SUN提出的目的是统一各种MOM(Message-Oriented Middleware)系统接口的规范,它包含以下两种消息模式,我们这里针对JMS不做深入的扩展,我们针对两种模式做一个简单的对比:


第二章:Kafka 一个发布与订阅消息系统(概念篇)_第1张图片
发布与订阅和点对点模式对比

* 点对点模式(Point to Point):

该模式是一个基于队列的模式,有生产者、队列和消费者几种角色,生产者发送一条消息到队列,这条消息只能被一个消费者消费。

* 发布和订阅消息模式(Publish and Subscribe Message)

该模式是一个基于主题的模式,有生产者、主题、消费者等角色,生产者传递一条消息,该消息被放置在指定主题的分区里,该主题可以被多个消费者订阅。

二、为什么我们需要使用发布订阅系统

在项目建立的初期,我们多数场景下为了快速的响应需求,模块之间都是直连。主要是追求简单、快速,如下图:

第二章:Kafka 一个发布与订阅消息系统(概念篇)_第2张图片
单个直连发布者

但是随着业务逐渐的扩展,我们的系统不得不做横向扩展,我们得新增很多模块,模块之间会建立很多连接,如下图:

第二章:Kafka 一个发布与订阅消息系统(概念篇)_第3张图片
多个直连发布者


系统之间节点连接一团糟,此时我们不得不为之前埋下的坑买单,我们得花大量时间梳理连接关系,一但某个系统做了升级,我们被迫得把所有的节点都测试一遍,耦合这么强的系统,可能维护一天你都会崩溃。

互联网的世界问题总是不断的,但是没关系,开源的世界最不缺的就是解决方法,只要你肯去学习,肯去查询,总有解决你问题的方案。于是我们找到了发布订阅消息系统,我们基于发布订阅消息系统对系统进行整改,如下:

第二章:Kafka 一个发布与订阅消息系统(概念篇)_第4张图片
发布者与订阅者系统

梳理后的系统是不是简单明了,即使我们后期有更多更复杂的扩展,我们还可以增加发布与订阅系统。这样的系统才可以跟随这个公司一起成长一起富强。

你可能感兴趣的:(第二章:Kafka 一个发布与订阅消息系统(概念篇))