第二章: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不做深入的擴充套件,我們針對兩種模式做一個簡單的對比:

釋出與訂閱和點對點模式對比
* 點對點模式(Point to Point):
該模式是一個基於佇列的模式,有生產者、佇列和消費者幾種角色,生產者傳送一條訊息到佇列,這條訊息只能被一個消費者消費。
* 釋出和訂閱訊息模式(Publish and Subscribe Message)
該模式是一個基於主題的模式,有生產者、主題、消費者等角色,生產者傳遞一條訊息,該訊息被放置在指定主題的分割槽裡,該主題可以被多個消費者訂閱。
二、為什麼我們需要使用釋出訂閱系統
在專案建立的初期,我們多數場景下為了快速的響應需求,模組之間都是直連。主要是追求簡單、快速,如下圖:

單個直連發布者
但是隨著業務逐漸的擴充套件,我們的系統不得不做橫向擴充套件,我們得新增很多模組,模組之間會建立很多連線,如下圖:

多個直連發布者
系統之間節點連線一團糟,此時我們不得不為之前埋下的坑買單,我們得花大量時間梳理連線關係,一但某個系統做了升級,我們被迫得把所有的節點都測試一遍,耦合這麼強的系統,可能維護一天你都會崩潰。
網際網路的世界問題總是不斷的,但是沒關係,開源的世界最不缺的就是解決方法,只要你肯去學習,肯去查詢,總有解決你問題的方案。於是我們找到了釋出訂閱訊息系統,我們基於釋出訂閱訊息系統對系統進行整改,如下:

釋出者與訂閱者系統
梳理後的系統是不是簡單明瞭,即使我們後期有更多更復雜的擴充套件,我們還可以增加發布與訂閱系統。這樣的系統才可以跟隨這個公司一起成長一起富強。