Kafka 简介(消息队列介绍)
Kafka 简介
消息队列
消息 Message
网络中两台计算机或者两个通讯设备之间传递的数据.例如说:文本,音乐,视频等内容
队列 Queue
一队特殊的线性表(数据元素首尾相接),特殊之处在于只允许在首部删除元素和在尾部追加元素(FIFO).入队/出队
消息队列 MQ
消息+队列,保存消息的队列.消息的传输过程中的容器.主要提供生产,消费接口供外部调用做数据的存储和获取.
消息队列的分类
MQ主要分为两类:点对点(p2p). 发布订阅(Pub/Sub)
Peer-to-Peer
一般基于Pull或者Polling接收消息
发送到队列中的消息被一个而且仅仅一个接收者所接收,即使有多个接收者在同一个队列中监听同一消息
即支持异步“即发即收”的消息传递方式,也支持同步请求/应答传送方式.
发布订阅
发布到同一个主题的消息,可被多个订阅者所接收.
发布/订阅即可基于Push消费数据,也可基于Pull或者Polling消费数据
解耦能力比P2P模型更强
p2p和发布订阅MQ的比较
共同点:
消息生产者生产消息发送到queue中,然后消息消费者从queue中读取并且消费消息.
不同点:
p2p模型包括:消息队列(Queue).发送者(Sender).接收者(Receiver)
一个生产者生产的消息只有一个消费者(Consumer)(即一旦被消费,消息就不再消息队列中).
例:电话通讯
pub/sub包括 : 消息队列(Queue). 主题(Topic). 发布者(Publisher).订阅者(Subscriber)
每个消息可以有多个消费者,彼此互不影响.
例:发布一个微博,关注微博的人才能够看到.
消息系统的使用场景
- 解耦 各系统之间通过消息系统这个统一的接口交换数据, 无须了解彼此的存在.
- 冗余 部分消息系统具有消息持久化能力, 可规避消息处理前丢失的风险(缓存)
- 扩展 消息系统是统一的数据接口, 各系统可独立扩展.
- 峰值处理能力 消息系统可顶住峰值流量,业务系统可根据处理能力从消息系统中获取并处理对应量的请求.
- 可恢复性 系统中部分键失效并不会影响整个系统, 它恢复会仍然从消息系统中获取并处理数据
- 异步通信 在不需要立即处理请求的场景下,可以将请求放入消息系统, 合适的时候再处理.
常见的消息系统
- RabbitMQ : Erlang编写.支持多协议AMQP.XMPP.SMTP.STOMP.支持负载均衡,数据持久化.同时支持p2p和发布/订阅模式
- Redis:基于Key-Value对的NoSQL数据库,同时支持MQ功能,可做轻量级队列服务使用.就入队操作而言,Redis对短消息(小于10kb)的性能比RabbitMQ好,长消息性能比RabbitMQ差.
- ZeroMQ:轻量级,不需要单独的消息服务器或中间件,应用程序本身扮演该角色,p2p.它实质上是一个库,需要开发人员自己组合多种技术,使用复杂度高.
- ActiveMQ:JMS实现,p2p,支持持久化,XA(分布式)事务
- Kafka/Jakfa:高性能跨语言的分布式发布/订阅消息系统,数据持久化,全分布式,同时支持在线和离线处理.
- MetaQ/RocketMQ:纯java实现,发布/订阅消息系统,支持本地事务和XA分布式事务.
Kafka简介
简介
Kafka是分布式的发布-订阅消息系统.它最初由Linkendln(领英)公司发布.使用Scala语言编写.于2010年12月份开源,成为Apache的顶级项目.Kafka是一个高吞吐量,持久性的分布式发布订阅消息系统.它主要用于处理活跃live的数据(登录.浏览.点击.分享.喜欢等用户行为产生的数据).
三大特点:
高吞吐量:可以满足每秒百万级别消息的生产和消费 ---- 生产消费
持久性:有一套完善的消息存储机制,确保数据的高效安全的持久化 ---- 中间存储.
分布式:基于分布式的扩展和容错机制,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的正常运行.