1. MQ产品对比
ActiveMQ | RabbitMQ | RocketMQ | Kafka | EMQ | |
---|---|---|---|---|---|
公司/社区 | Apache | Rabbit(https://www.rabbitmq.com/) | 阿里(https://rocketmq.apache.org/) | Apache(http://kafka.apache.org/ ) | EMQ X(https://www.emqx.cn/) |
开发语言 | Java | Erlang(二郎神,高并发语言) | Java | Scala&Java | Erlang/OTP |
协议支持 | OpenWire,STOMP,REST,XMPP,AMQP | AMQP,XMPP,SMTP,STOMP | 自定义协议 | 自定义协议,社区封装了http协议支持 | MQTT、MQTT-SN、CoAP、WebSocket 或私有协议支持 |
可用性 | 一般(主从) | 高(主从) | 非常高(分布式) | 非常高(分布式) | — |
单机吞吐量 | 万级 | 万级 | 十万级 | 百万级 | 单机支持百万连接,集群支持千万级连接;毫秒级消息转发 |
消息延迟 | 毫秒级(ms) | 微秒级(us) | 毫秒级(ms) | 毫秒级以内(ms级以内) | 毫秒级(ms) |
消息可靠性 | 一般 | 高 | 高 | 高(数据副本) | 高 |
功能特性 | 老牌产品,成熟度高,文档较多,支持各种协议 | 并发能力强,性能好,延迟低,社区活跃,管理界面丰富 | MQ功能比较完善,扩展性最佳 | 只支持主要的MQ功能,主要应用于大数据领域(如 大数据领域的实时计算、日志采集等场景) | 主要服务于物联网领域(如 车联网、能源电力、充电桩、智能售货机、智能家居、工业互联网等等) |
使用场景:
- Kafka,追求高吞吐量,适合产生大量数据的互联网服务的数据收集业务;
- RocketMQ, 可靠性要求很高的金融互联网领域,稳定性高,经历了多次阿里双11考验;
- RabbitMQ ,性能较好,社区活跃度高,如果数据量没有那么大,优先选择功能比较完备的RabbitMQ。
2. Kafka概述
Kafka官网:http://kafka.apache.org/
Kafka是一个分布式流处理平台,它可以处理消息数据流,由Scala和Java编写。Kafka最初由LinkedIn开发,现在是Apache软件基金会的一部分。Kafka的主要目的是在高性能、高吞吐量的情况下处理消息,是一个可扩展、可靠、容错的消息流平台。Kafka的基本组件包括producer、broker、以及consumer。生产者producer将消息发送到Kafka集群,消息经过broker中转,消费者consumer从broker中读取消息。Kafka适用于处理海量的实时数据,比如日志、事件信息、度量信息等等。
Kafka常用名词解释:
-
producer:发布消息的对象称之为主题生产者(Kafka topic producer);
-
topic:Kafka将消息分门别类,每一类的消息称之为一个主题(Topic);
-
consumer:订阅消息并处理发布的消息的对象称之为主题消费者(consumers);
-
broker:已发布的消息保存在一组服务器中,称之为Kafka集群。集群中的每一个服务器都是一个代理(Broker)。 消费者可以订阅一个或多个主题(topic),并从Broker拉数据,从而消费这些已发布的消息。
3. Kafka安装与配置
基于Docker环境部署。
Kafka对于zookeeper是强依赖,保存kafka相关的节点数据,所以安装Kafka之前必须先安装zookeeper。
1、安装zookeeper
# 下载zookeeper镜像
docker pull zookeeper:3.4.14# 启动容器
docker run -d --name zookeeper -p 2181:2181 zookeeper:3.4.14
2、安装kafka
# 下载镜像
docker pull wurstmeister/kafka:2.12-2.3.1# 启动容器
docker run -d --name kafka \
--env KAFKA_ADVERTISED_HOST_NAME=192.168.200.130 \
--env KAFKA_ZOOKEEPER_CONNECT=192.168.200.130:2181 \
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.200.130:9092 \
--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
--env KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" \
--net=host wurstmeister/kafka:2.12-2.3.1
-
KAFKA_ADVERTISED_HOST_NAME:设置当前主机ip地址;
-
KAFKA_ADVERTISED_LISTENERS:kafka发布到zookeeper供客户端使用的服务地址。
-
KAFKA_ZOOKEEPER_CONNECT:zookeeper的连接地址;
-
KAFKA_LISTENERS:允许使用PLAINTEXT侦听器;
-
KAFKA_HEAP_OPTS:性能调优。
注:启动容器的时候,先启动zookeeper后启动kafka。