Kafka 简介(消息队列介绍)

Kafka 简介

 

消息队列

消息 Message

    网络中两台计算机或者两个通讯设备之间传递的数据.例如说:文本,音乐,视频等内容

队列 Queue

    一队特殊的线性表(数据元素首尾相接),特殊之处在于只允许在首部删除元素和在尾部追加元素(FIFO).入队/出队

消息队列 MQ

    消息+队列,保存消息的队列.消息的传输过程中的容器.主要提供生产,消费接口供外部调用做数据的存储和获取.

 

消息队列的分类

MQ主要分为两类:点对点(p2p). 发布订阅(Pub/Sub)

Peer-to-Peer

一般基于Pull或者Polling接收消息

发送到队列中的消息被一个而且仅仅一个接收者所接收,即使有多个接收者在同一个队列中监听同一消息

即支持异步“即发即收”的消息传递方式,也支持同步请求/应答传送方式.

Kafka 简介(消息队列介绍)

 

 发布订阅

发布到同一个主题的消息,可被多个订阅者所接收.

发布/订阅即可基于Push消费数据,也可基于Pull或者Polling消费数据

解耦能力比P2P模型更强

Kafka 简介(消息队列介绍)

 

p2p和发布订阅MQ的比较 

共同点:

    消息生产者生产消息发送到queue中,然后消息消费者从queue中读取并且消费消息.

不同点:

    p2p模型包括:消息队列(Queue).发送者(Sender).接收者(Receiver)

    一个生产者生产的消息只有一个消费者(Consumer)(即一旦被消费,消息就不再消息队列中).

    例:电话通讯

 

   pub/sub包括 : 消息队列(Queue). 主题(Topic). 发布者(Publisher).订阅者(Subscriber)

    每个消息可以有多个消费者,彼此互不影响.

    例:发布一个微博,关注微博的人才能够看到.

 

消息系统的使用场景 

  • 解耦 各系统之间通过消息系统这个统一的接口交换数据, 无须了解彼此的存在.
  • 冗余 部分消息系统具有消息持久化能力, 可规避消息处理前丢失的风险(缓存)
  • 扩展 消息系统是统一的数据接口, 各系统可独立扩展.
  • 峰值处理能力 消息系统可顶住峰值流量,业务系统可根据处理能力从消息系统中获取并处理对应量的请求.
  • 可恢复性 系统中部分键失效并不会影响整个系统, 它恢复会仍然从消息系统中获取并处理数据
  • 异步通信 在不需要立即处理请求的场景下,可以将请求放入消息系统, 合适的时候再处理.

 

 常见的消息系统

  1. RabbitMQ : Erlang编写.支持多协议AMQP.XMPP.SMTP.STOMP.支持负载均衡,数据持久化.同时支持p2p和发布/订阅模式
  2. Redis:基于Key-Value对的NoSQL数据库,同时支持MQ功能,可做轻量级队列服务使用.就入队操作而言,Redis对短消息(小于10kb)的性能比RabbitMQ好,长消息性能比RabbitMQ差.
  3. ZeroMQ:轻量级,不需要单独的消息服务器或中间件,应用程序本身扮演该角色,p2p.它实质上是一个库,需要开发人员自己组合多种技术,使用复杂度高.
  4. ActiveMQ:JMS实现,p2p,支持持久化,XA(分布式)事务
  5. Kafka/Jakfa:高性能跨语言的分布式发布/订阅消息系统,数据持久化,全分布式,同时支持在线和离线处理.
  6. MetaQ/RocketMQ:纯java实现,发布/订阅消息系统,支持本地事务和XA分布式事务.

 

Kafka简介

简介

Kafka是分布式的发布-订阅消息系统.它最初由Linkendln(领英)公司发布.使用Scala语言编写.于2010年12月份开源,成为Apache的顶级项目.Kafka是一个高吞吐量,持久性的分布式发布订阅消息系统.它主要用于处理活跃live的数据(登录.浏览.点击.分享.喜欢等用户行为产生的数据).

Kafka 简介(消息队列介绍)

三大特点:

高吞吐量:可以满足每秒百万级别消息的生产和消费  ---- 生产消费

持久性:有一套完善的消息存储机制,确保数据的高效安全的持久化 ---- 中间存储.

分布式:基于分布式的扩展和容错机制,Kafka的数据都会复制到几台服务器上.当某一台故障失效时,生产者和消费者转而使用其他的机器 ---- 整体

健壮性

 

设计目标

高吞吐率 在廉价的商用机器上单机可支持每秒100万条消息的读写

消息持久化 所有消息均被持久化到磁盘,无消息丢失,支持消息重放

完全分布式 Producer, Broker, Consumer均支持水平扩展

同时适应在线流处理和离线批处理

 

 

Kafka核心概念 

一个MQ需要哪些部分?生成,消费,消息类别,存储等等.

对于kafka而言,kafka服务就像是一个大的水池,不断的生产,存储,消费着各种类别的消息.那么kafka由何组成呢?

Kafka服务

Topic:主题,Kafka处理的消息的不同分类.

Broker:消息服务器代理, Kafka集群中的一个kafka服务节点称为一个broker,主要存储消息数据.存在硬盘中,每个topic都是有分区的.

Partition:Topic物理上的分组,一个topic在broker中被分为1个或者多个Partition,分区在创建topic的时候指定.

Message:消息,是通信的基本单位,每个消息都属于一个partition.

Kafka服务相关

Producer:消息和数据的生产者,向Kafka的一个topic发布消息.

Consumer:消息和数据的消费者,定于topic并处理其发布的消息.

Zookeeper:协调kafka的正常运行.