Kafka、ActiveMQ、RabbitMQ、RocketMQ 优缺点对比
特性 | ActiveMQ | RabbitMQ | RocketMQ | Kafka |
---|---|---|---|---|
单机吞吐量 | 万级,比 RocketMQ、Kafka 低一个数量级 | 同 ActiveMQ | 10 万级,支撑高吞吐 | 10 万级,高吞吐,一般配合大数据类的系统来进行实时数据计算、日志采集等场景 |
topic 数量对吞吐量的影响 | topic 可以达到几百/几千的级别,吞吐量会有较小幅度的下降,这是 RocketMQ 的一大优势,在同等机器下,可以支撑大量的 topic | topic 从几十到几百个时候,吞吐量会大幅度下降,在同等机器下,Kafka 尽量保证 topic 数量不要过多,如果要支撑大规模的 topic,需要增加更多的机器资源 | ||
时效性 | ms 级 | 微秒级,这是 RabbitMQ 的一大特点,延迟最低 | ms 级 | 延迟在 ms 级以内 |
可用性 | 高,基于主从架构实现高可用 | 同 ActiveMQ | 非常高,分布式架构 | 非常高,分布式,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用 |
消息可靠性 | 有较低的概率丢失数据 | 基本不丢 | 经过参数优化配置,可以做到 0 丢失 | 同 RocketMQ |
功能支持 | MQ 领域的功能极其完备 | 基于 erlang 开发,并发能力很强,性能极好,延时很低 | MQ 功能较为完善,还是分布式的,扩展性好 | 功能较为简单,主要支持简单的 MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用 |
下载erlang和rabbitmq安装包
[root@localhost ~]# wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.5/rabbitmq-server-generic-unix-3.9.5.tar.xz
[root@localhost ~]# wget https://erlang.org/download/otp_src_24.0.tar.gz
安装erlang所需依赖
[root@localhost ~]# yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto
编译安装erlang
[root@localhost ~]# tar xf otp_src_24.0.tar.gz
[root@localhost ~]# cd otp_src_24.0
[root@localhost ~]# ./configure --prefix=/usr/local/erlang
[root@localhost ~]# make
[root@localhost ~]# make install
添加erlang环境变量
[root@localhost ~]# echo "export PATH=$PATH:/usr/local/erlang/bin" >> /etc/profile
[root@localhost ~]# source /etc/profile
测试erlang是否安装成功
[root@localhost ~]# erl
Erlang/OTP 24 [erts-12.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]
Eshell V12.0 (abort with ^G)
1>
User switch command
--> q
安装rabbitmq
[root@localhost ~]# tar xf rabbitmq-server-generic-unix-3.9.5.tar.xz -C /usr/local
[root@localhost ~]# ln -sv /usr/local/rabbitmq_server-3.9.5 /usr/local/rabbitmq
添加rabbitmq环境变量
[root@localhost ~]# echo "export PATH=$PATH:/usr/local/rabbitmq/sbin" >> /etc/profile
[root@localhost ~]# source /etc/profile
测试rabbitmq是否安装成功
# 开启rabbitmq服务
[root@localhost ~]# rabbitmq-server -detached
# 查看服务状态
[root@localhost ~]# rabbitmqctl status
Status of node rabbit@localhost ...
Runtime
OS PID: 3605559
OS: Linux
Uptime (seconds): 6994
Is under maintenance?: false
RabbitMQ version: 3.9.5
Node name: rabbit@test-fengtan-app-0-140
Erlang configuration: Erlang/OTP 24 [erts-12.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]
Erlang processes: 412 used, 1048576 limit
Scheduler run queue: 1
Cluster heartbeat timeout (net_ticktime): 60
Plugins
Enabled plugin file: /usr/local/rabbitmq/etc/rabbitmq/enabled_plugins
Enabled plugins:
* rabbitmq_management
* amqp_client
* rabbitmq_web_dispatch
* cowboy
* cowlib
* rabbitmq_management_agent
Data directory
........
# 开启rabbitmq
[root@localhost ~]# rabbitmqctl start_app
# 查看rabbitmq启动端口
[root@localhost ~]# netstat -tnlp|grep 'beam|epmd'
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 3605559/beam.smp
tcp 0 0 0.0.0.0:4369 0.0.0.0:* LISTEN 3605592/epmd
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 3605559/beam.smp
tcp6 0 0 :::5672 :::* LISTEN 3605559/beam.smp
tcp6 0 0 :::4369 :::* LISTEN 3605592/epmd
# 开启插件管理
[root@localhost ~]# rabbitmq-plugins enable rabbitmq_management
# 查看插件集合
[root@localhost ~]# rabbitmq-plugins list
# 关闭rabbitmq
[root@localhost ~]# rabbitmqctl stop_app
通过web界面访问http://localhost:15672即可管理rabbitmq
用户管理
# 查看所有用户
rabbitmqctl list_users
# 添加一个用户
rabbitmqctl add_user test 123456
# 配置权限
rabbitmqctl set_permissions -p "/" test ".*" ".*" ".*"
# 查看用户权限
rabbitmqctl list_user_permissions test
# 设置tag
rabbitmqctl set_user_tags test administrator
# 删除用户(安全起见,删除默认用户)
rabbitmqctl delete_user guest