前言
kafka的外在表现很像消息系统,允许发布和订阅消息流,但是它和传统的消息系统有很大的差异:
-
首先,kafka是个现代分布式系统,以集群的方式运行,可以自由伸缩
-
其次,kafka可以按照要求存储数据,保存多久都可以
-
第三,流式处理将数据处理的层次提示到了新高度,消息系统只会传递数据。kafka的流式处理能力可以让我们用很少的代码就能动态的处理派生流和数据集。所以,kafka不仅仅是个消息中间件
kafka不仅仅是个消息中间件,同时它是个流平台,这个平台上可以发布和订阅数据流(kafka的流,有一个单独的包stream的处理),并把它们保存起来,进行处理,这个就是kafka作者的设计理念。今天之所以要聊Kafka,是因为前不久我们公司来了位阿里P8大神,在看完他的手写“Kafka笔记”,我只能用两个字来形容:膜拜!崇拜!
基础知识
RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,它是使用Erlang
语言来编写的,并且是基于AMQP
协议的;
RabbitMQ高性能的原因
- Erlang语言在交换机的交互方面性能优秀的(
Erlang
语言最初在于交换机领域的架构模式,这样使得RabbitMQ在Broker之间进行数据交互的性能是非常优秀的) - Erlang有着和原生
Socket
一样的延迟
AMQP协议
什么是AMQP高级消息队列协议
AMQP(Advanced Message Queueing Protocol)定义:具有现代特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计
AMQP协议模型:
Publisher 推送消息前先与Server建立连接,找到Virtual host
,然后将消息推送至Exchange交换机。而交换机与Message Queue
有绑定关系(一个交换机相当于一个独立的虚拟机,而这个虚拟机内的各种独立的应用就相当于一个Queue,这个Queue与交换机绑定),Consumer
通过绑定的对队列,而交换机也绑定了队列。发送者将消息发送给交换机,这样就能完成消息的推送了
整体架构图<