主流MQ对比
ActiveMQ | RabbitMQ | Kafka | |
---|---|---|---|
所属社区/公司 | Apache | Mozilla Public License | Apache/LinkedIn |
开发语言 | Java | Erlang | Scala |
支持的协议 | OpenWire、STOMP、REST、XMPP、AMQP | AMQP | 仿AMQP |
事务 | 支持 | 不支持 | 不支持 |
集群 | 支持 | 支持 | 支持 |
负载均衡 | 支持 | 支持 | 支持 |
动态扩容 | 不支持 | 不支持 | 支持(zk) |
ActiveMQ
协议支持多,但数据吞吐率最低RabbitMQ
为了保证可靠性和一致性使用这个Kafka
如果数据很庞大,支撑高并发,支持动态扩容,廉价存储,Kafka是大数据中的生态,不能保证可靠性RocketMQ
很少使用,使用成本比较高,官网信息很少,资料太少
Kafka 入门
kafka官网:https://kafka.apache.org/quickstart
Kafka 简介
Kafka 是 linkedin 使用Scala 编写具有高水平扩展和高吞吐量的分布式消息系统。
Kafka 对消息保存时根据 Topic 进行分类,发送消息者成为 Producer ,消息接受者成为 Consumer ,此外 Kafka 集群有多个 Kafka 实例组成,每个实例(Server)称为 broker。
无论是 Kafka 集群,还是Producer和Consumer都依赖于 zookeeper来保证系统可用性,为集群保存一些meta消息。
Kafka 主要功能
Apache Kafka 是一个分布式流处理平台
流处理平台特性
- 可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。
- 可以存储流式的记录,并且有较好的容错性。
- 可以在流式记录产生时就进行处理。
Kafka 适合什么样的场景?
- 构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。(相当于消息队列)
- 构建实时流式应用程序,对这些流数据进行转换或者影响。
Kafka 重要概念
接下来,我们将深入探索Kafka的特征,首先我们要了解一些重要概念。
- Kafka作为一个集群运作在一个或多个服务器上
- Kafka通过topic对存储的流数据进行分类
- 每条记录中包含一个key,一个value和一个timestamp(时间戳)
Kafka 核心API
Producer API
允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。Consumer API
允许一个应用程序订阅一个或多个topic,并且对发布给他们的流式数据进行处理。Streams API
允许一个应用程序作为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或者多个topic中去,在输入输出流中进行有效的转换。Connector API
允许构建并运行可重用的生产者或者消费者,将Kafka topics连接到已存在的应用程序或者数据系统。比如,连接到一个关系型数据库,捕捉表(table)的所有变更内容。
Kafka 核心API
相关概念 - AMQP协议
一些基本的概念:
消费者(Consumer):从消息队列中请求消息的客户端应用程序
生产者(Producer):向broker发布消息的客户端应用程序
AMQP服务器端(broker):用来接受生产者发送的消息并将这些消息路由给服务器中的队列
相关概念 - Topics和Logs
Topic 就是数据主题,是数据记录发布的地方,可以用来区分业务系统。Kafka中的Topics总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。
相关概念 - Partition
相关概念 - Distribution
相关概念 - Consumers
Kafka 整体架构
备份(Replication):为了保证分布式可靠性,Kafka0.8开始对每个分区的数据进行备份(不同Broker上),防止其中一个Broker宕机造成分区数据不可用。