zoukankan      html  css  js  c++  java
  • Kafka原理详解

    一、Kafka概述

    Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。
    Kafka是一个分布式消息队列。Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)称为broker。
    无论是kafka集群,还是consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性。能够很好地进行离线和在线应用。

    分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息。有两种主要的消息传递模式:点对点传递模式、发布-订阅模式。大部分的消息系统选用发布-订阅模式。Kafka就是一种发布-订阅模式

    1.1 点对点消息传递模式

    在点对点消息系统中,消息持久化到一个队列中。此时,将有一个或多个消费者消费队列中的数据。但是一条消息只能被消费一次。当一个消费者消费了队列中的某条数据之后,该条数据则从消息队列中删除。该模式即使有多个消费者同时消费数据,也能保证数据处理的顺序。

    Peer-to-Peer模式工作原理:

    1.消息生产者Producer1生产消息到Queue,然后Consumer1从Queue中取出并且消费消息。
    2.消息被消费后,Queue将不再存储消息,其它所有Consumer不可能消费到已经被其它Consumer消费过的消息。
    3.Queue支持存在多个Producer,但是对一条消息而言,只会有一个Consumer可以消费,其它Consumer则不能再次消费。
    4.但Consumer不存在时,消息则由Queue一直保存,直到有Consumer把它消费。

     1.2 发布-订阅消息传递模式

    在发布-订阅消息系统中,消息被持久化到一个topic中。与点对点消息系统不同的是,消费者可以订阅一个或多个topic,消费者可以消费该topic中所有的数据,同一条数据可以被多个消费者消费,数据被消费后不会立马删除。在发布-订阅消息系统中,消息的生产者称为发布者,消费者称为订阅者。

    Publish/Subscribe模式工作原理:

    1.消息发布者Publisher将消息发布到主题Topic中,同时有多个消息消费者 Subscriber消费该消息。
    2.和PTP方式不同,发布到Topic的消息会被所有订阅者消费。
    3.当发布者发布消息,不管是否有订阅者,都不会报错信息。
    4.一定要先有消息发布者,后有消息订阅者。

     二、queue与topic的区别

    JMS中定义了两种消息模型:点对点(point to point, queue)和发布/订阅(publish/subscribe,topic)。主要区别就是是否能重复消费。

    2.1 点对点:Queue,不可重复消费

    消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息。
    消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。
    Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费、其它的则不能消费此消息了。
    当消费者不存在时,消息会一直保存,直到有消费消费。

    2.2 发布/订阅:Topic,可以重复消费

    消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。
    和点对点方式不同,发布到topic的消息会被所有订阅者消费。
    当生产者发布消息,不管是否有消费者。都不会保存消息。

     三、



      

  • 相关阅读:
    Windows API Reference for C#, VB.NET and VB6
    工程建设项目综合信息管理系统
    GridView,Repeater分页控件:WebPager 开源了
    asp.net服务器控件开发学习之路(一)
    ajaxToolkit:TabContainer 背景色的设置
    TreeView 树结构的断层处理
    C# 集合类(二):Queue
    AutoCAD.net(三)用VS.NET2005开发ObjectARX程序 调试方法
    AutoCAD.net(一):更改AutoCAD窗口的标题和图标
    C# 集合类(四):Hashtable
  • 原文地址:https://www.cnblogs.com/Steven5007/p/14062682.html
Copyright © 2011-2022 走看看