Kafka,RabbitMq,RocketMQ对比分析(1)--安装过程

本文详细介绍了Kafka和RabbitMQ的单机及集群安装配置流程,包括环境搭建、配置修改、服务启动及测试验证,适用于初学者快速上手消息中间件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kafka基本概念
Message
消息,就是要发送的内容,一般包装成一个消息对象。

Topic
通俗来讲的话,就是放置“消息”的地方,也就是说消息投递的一个容器。假如把消息看作是信封的话,那么 Topic 就是一个邮箱 。

Partition && Log
Partition 分区,可以理解为一个逻辑上的分区,像是我们电脑的磁盘 C:, D:, E: 盘一样,Kafka 为每个分区维护着一份日志Log文件。

Producers(生产者)
和其他消息队列一样,生产者通常都是消息的产生方。
在 Kafka 中它决定消息发送到指定Topic的哪个分区上。

Consumers(消费者)
消费者就是消息的使用者,在消费者端也有几个名词需要区分一下。
一般消息队列有两种模式的消费方式,分别是 队列模式 和 订阅模式。

队列模式:一对一,就是一个消息只能被一个消费者消费,不能重复消费。一般情况队列支持存在多个消费者,但是对于一个消息,只会有一个消费者可以消费它。

订阅模式:一对多,一个消息可能被多次消费,消息生产者将消息发布到Topic中,只要是订阅改Topic的消费者都可以消费。

单机安装ZOOKEEPER
Kafka的运行依赖于Zookeeper,所以在运行Kafka之前我们需要安装并运行Zookeeper(kafka 最新版本内置了 zookeeper,可以不需要安装zookeeper)
下载安装文件: http://zookeeper.apache.org/releases.html

解压文件
打开zookeeper-3.4.6\conf,把zoo_sample.cfg重命名成zoo.cfg
从文本编辑器里打开zoo.cfg
把dataDir的值改成“…/data”
dataLogDir=…/zkLog
添加如下系统变量:
ZOOKEEPER_HOME: C:\Users\localadmin\CODE\zookeeper-3.4.6(zookeeper目录)
Path: 在现有的值后面添加 “;%ZOOKEEPER_HOME%\bin;”
运行Zookeeper: 打开cmd然后执行 zkserver

安装与运行kafka
下载地址: http://kafka.apache.org/downloads.html
下载安装文件
解压文件
打开kafka_2.12-2.5.0\config

从文本编辑器里打开 server.properties
把 log.dirs的值改成 “./logs”

打开cmd
进入kafka文件目录: cd C:\Users\localadmin\CODE\kafka_2.12-2.5.0(kafka目录)

输入并执行: .\bin\windows\kafka-server-start.bat .\config\server.properties

创建TOPICS
打开cmd 并进入cd C:\Users\localadmin\CODE\kafka_2.12-2.5.0\bin\windows

创建一个topic: kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

列出
kafka-topics.bat --list --bootstrap-server localhost:9092

打开一个PRODUCER:
cd C:\Users\localadmin\CODE\kafka_2.12-2.5.0\bin\windows
kafka-console-producer.bat --broker-list localhost:9092 --topic test

打开一个CONSUMER:
cd C:\Users\localadmin\CODE\kafka_2.12-2.5.0\bin\windows
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning

PRODUCER输入Hello world
CONSUMER可以接收到。

安装集群kafka
zookeeper:
打开zoo.cfg 修改配置信息

server.1=127.0.0.1:12888:1388
server.2=127.0.0.1:12889:1389
server.3=127.0.0.1:12887:1387

格式: server.A = B:C:D
A:是一个数字,表示第几号服务器
B:服务器IP地址
C:是一个端口号,用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口
D:是在leader挂掉时专门用来进行选举leader所用的端口

复制两份zookeeper解压好配置后的文件夹,命名为
在这里插入图片描述在对应的文件下下面修改zoo.cfg的监听端口地址
比如:

第一个zookeeper-3.4.6程序 修改zoo.cfg 配置文件
clientPort=2181
第二个zookeeper-3.4.6-2程序 修改zoo.cfg 配置文件
clientPort=2182
第三个zookeeper-3.4.6-2程序 修改zoo.cfg 配置文件
clientPort=2183
创建ServerID
在配置的dataDir目录下面新建一个 myid 文件,文件内容就是对应的id号,

比如:
zookeeper-3.4.6程序 myid 文件的内容 为 1
zookeeper-3.4.6-2程序 myid 文件的内容 为 2
zookeeper-3.4.6-3程序 myid 文件的内容 为 3

启动zookeeper
在对应的bin目录下启动
zkServer.cmd

修改Kafka

#唯一标识
broker.id=0
#监听端口
port=9092
host.name=127.0.0.1
#消息最大大小
message.max.bytes=50485760
#配置副本数量
default.replication.factor=2
#获取的最大大小
replica.fetch.max.bytes=50485760
#队列中消息持久化存放的位置,可以多个目录,用逗号分开
log.dirs=kafka-logs
#默认的分区数
num.partitions=2
#对应着刚刚配置的zookeeper的三个ip与端口地址
zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183

复制两份解压后的文件
在对应的server.properties中修改

#唯一标识

broker.id=0
broker.id=1
broker.id=2

#监听端口

port=9092
port=9093
port=9094

启动对应的kafka
进入到bin/windows目录下 启动kafka并指定配置文件

kafka-server-start.bat …/…/config/server.properties

启动过程中如果遇到Kafka中错误:

Unrecognized VM option ‘UseCompressedOops’ Error: Clould not create the Java Vritual Machine. Error: A fatal exception has occurres . Program will exit.

解决方案:

找到bin/windows/kafka-run-class.bat 文件,

找到112行左右

IF [“%KAFKA_JVM_PERFORMANCE_OPTS%”] EQU [“”] (

set KAFKA_JVM_PERFORMANCE_OPTS=-server -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -Djava.awt.headless=true

)
删除掉 -XX:+UseCompressedOops 即可

测试

kafka-topics.bat --create --zookeeper 127.0.0.1:2181 --replication-factor 1 --partitions 1 --topic test
kafka-topics.bat --list --zookeeper localhost:2181
kafka-console-producer.bat --broker-list localhost:9092 --topic test
kafka-console-consumer.bat --zookeeper localhost:2181 --topic test --from-beginning 
kafka-console-consumer.bat --zookeeper localhost:2182 --topic test --from-beginning 
kafka-console-consumer.bat --zookeeper localhost:2183 --topic test --from-beginning 

不同客户端能接收到消息,说明配置成功

RabbitMq 单机版安装
1.下载安装erlang,安装在D盘

2.设置环境变量

ERLANG_HMOE =D:\erl10.3

在path变量中添加 %ERLANG_HOME%/bin

3.安装RabbitMQ 安装在D:\RabbitMQ 这是安装根目录

安装好后会自动启动服务,在开始菜单服务会看到rabbitmq启动了

4.从开始菜单打开RabbitMQ Command Prompt(sbin dir)进入安装目录下的sbin目录,

执行rabbitmq-plugins enable rabbitmq_management 打开rabbitMQweb管理工具

5.访问http://127.0.0.1:15672 用户名guest 密码guest登录 安装成功。

PS:

1.执行rabbitMQ命令管理MQ

a.开始中打开RabbitMQ Command Prompt(sbin dir)进入安装目录下sbin目录管理

b. 打开cmd进入安装目录下sbin目录写命令管理

2.在RabbitMQ Command Prompt(sbin dir)中

rabbitmq-service start打开RabbitMQ服务 rabbitmq-service stop关闭RabbitMQ服务

net start RabbitMQ打开RabbitMQ服务 net stop RabbitMQ关闭RabbitMQ服务

两种方式都可以运行,效果相同。

但是从cmd进入sbin目录运行这两种启动服务的命令都报错,系统错误5,拒绝访问,原因不明
其他的管理命令两者都可以运行

RabbitMq 单机集群版安装
1:准备基础文件、环境变量

设置环境变量:

变量名:RABBITMQ_BASE

变量值:C:\Program Files\RabbitMQ Server(例:这个是安装目录的前半部分,我的安装目录是:C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.5)

准备多节点需要文件

windows环境下对应的bat文件在安装目录下的sbin文件夹下

次用2个节点来建单机集群所以对就的文件命名我们在对应的文件名加node1,node2来区分,这样便于后面的管理更清晰。

分别复制2份下面对应的文件

rabbitmq-server.bat:分别重命名为rabbitmq-server-node1.bat,rabbitmq-server-node2.bat

rabbitmqctl.bat:分别重命名为rabbitmqctl-node1.bat,rabbitmqctl-node2.bat

rabbitmq-env.bat:分别重命名为rabbitmq-env-node1.bat,rabbitmq-env-node2.bat

rabbitmq-plugins.bat:分别重命名为rabbitmq-plugins-node1.bat,rabbitmq-plugins-node2.bat

准备配置文件(配置文件在安装目录的etc文件夹下):

复制rabbitmq.config.example2份,并分别重命名为:rabbitmq-node1.config,rabbitmq-node2.config

2:基础文件准备完毕进行对应文件的修改:

修改rabbitmq-node1.config

在{rabbitmq_management下找到

%% {listener, [{port, 12345}, %% {ip, “127.0.0.1”}, %% {ssl, true}, %% {ssl_opts, [{cacertfile, “/path/to/cacert.pem”}, %% {certfile, “/path/to/cert.pem”}, %% {keyfile, “/path/to/key.pem”}]}]},

改成:{listener, [{port, 15673},{ip, “127.0.0.1”},{ssl, false}]}

修改rabbitmq-node2.config

在{rabbitmq_management下找到

%% {listener, [{port, 12345}, %% {ip, “127.0.0.1”}, %% {ssl, true}, %% {ssl_opts, [{cacertfile, “/path/to/cacert.pem”}, %% {certfile, “/path/to/cert.pem”}, %% {keyfile, “/path/to/key.pem”}]}]},

改成:{listener, [{port, 15675},{ip, “127.0.0.1”},{ssl, false}]}

修改rabbitmq-env-node1.bat

在开头大概16行左右添加

set RABBITMQ_CONFIG_FILE=!RABBITMQ_HOME!\etc\rabbitmq-node1
set RABBITMQ_BASE=!RABBITMQ_BASE!\rabbitmq-cluster
set RABBITMQ_NODENAME=rab1@spy
set RABBITMQ_NODE_PORT=5673
set RABBITMQ_DIST_PORT=16671

修改rabbitmq-server-node1.bat

call “%TDP0%/rabbitmq-env.bat” %~n0 修改为 call “%TDP0%/rabbitmq-env-node1.bat” %~n0

修改rabbitmqctl-node1.bat

call “%TDP0%/rabbitmq-env.bat” %~n0 修改为 call “%TDP0%/rabbitmq-env-node1.bat” %~n0

修改rabbitmq-plugins-node1.bat

call “%TDP0%/rabbitmq-env.bat” %~n0 修改为 call “%TDP0%/rabbitmq-env-node1.bat” %~n0

修改rabbitmq-env-node2.bat

在开头大概16行左右添加

set RABBITMQ_CONFIG_FILE=!RABBITMQ_HOME!\etc\rabbitmq-node2
set RABBITMQ_BASE=!RABBITMQ_BASE!\rabbitmq-cluster
set RABBITMQ_NODENAME=rab2@spy
set RABBITMQ_NODE_PORT=5675
set RABBITMQ_DIST_PORT=16673

修改rabbitmq-server-node2.bat

call “%TDP0%/rabbitmq-env.bat” %~n0 修改为 call “%TDP0%/rabbitmq-env-node2.bat” %~n0

修改rabbitmqctl-node2.bat

call “%TDP0%/rabbitmq-env.bat” %~n0 修改为 call “%TDP0%/rabbitmq-env-node2.bat” %~n0

修改rabbitmq-plugins-node2.bat

call “%TDP0%/rabbitmq-env.bat” %~n0 修改为 call “%TDP0%/rabbitmq-env-node2.bat” %~n0

3:启动server:

rabbitmq-server-node1.bat
rabbitmq-server-node2.bat

添加节点2到节点1组集群

rabbitmqctl-node2.bat stop_app
rabbitmqctl-node2.bat reset
rabbitmqctl-node2.bat join_cluster rab1@spy
rabbitmqctl-node2.bat start_app

cluster_status 查看集群状态
在命令行中执行rabbitmqctl-node2.bat cluster_status
访问http://127.0.0.1:15674/#/,http://127.0.0.1:15675/#/查看
在这里插入图片描述
Rocket单机安装
地址:http://rocketmq.apache.org/release_notes/release-notes-4.3.0/
选择‘Binary’进行下载
解压已下载工程

系统环境变量配置
变量名:ROCKETMQ_HOME
变量值:MQ解压路径\MQ文件夹名
eg、ROCKETMQ_HOME=D:\dev\rocketmq-all-4.3.0-bin-release

启动NAMESERVER
Cmd命令框执行进入至‘MQ文件夹\bin’下,然后执行‘start mqnamesrv.cmd’,启动NAMESERVER。成功后会弹出提示框,此框勿关闭。

启动BROKER
Cmd命令框执行进入至‘MQ文件夹\bin’下,然后执行‘start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true’,启动BROKER。成功后会弹出提示框,此框勿关闭。

RocketMQ插件部署
下载地址:https://github.com/apache/rocketmq-externals.git
如果下载失败,把https://github.com/apache/rocketmq-externals.git 的https换成git就ok

下载完成之后,进入‘rocketmq-externals\rocketmq-console\src\main\resources’文件夹,打开‘application.properties’进行配置。

server.contextPath=
server.port=8088
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr  NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
rocketmq.config.namesrvAddr=127.0.0.1:9876
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console's data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true

编译启动
用CMD进入‘\rocketmq-externals\rocketmq-console’文件夹,执行‘mvn clean package -Dmaven.test.skip=true’,编译生成。

编译成功之后,Cmd进入‘target’文件夹,执行‘java -jar rocketmq-console-ng-1.0.0.jar’,启动‘rocketmq-console-ng-1.0.0.jar’。

浏览器中输入‘127.0.0.1:配置端口’,成功后即可查看。
eg:http://127.0.0.1:8088
在这里插入图片描述Rocket单机集群安装
在conf文件夹下发现2m-2s-async文件夹
修改boker-a.properties

 #所属集群名字
    brokerClusterName=rocketmq-cluster
    #broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
    brokerName=broker-a
    #0 表示 Master,>0 表示 Slave
    brokerId=0
    #nameServer地址,分号分割
    namesrvAddr=127.0.0.1:9876;127.0.0.1:9875
    #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
    defaultTopicQueueNums=4
    #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    autoCreateTopicEnable=true
    #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    autoCreateSubscriptionGroup=true
    #Broker 对外服务的监听端口,
    listenPort=10911
    #删除文件时间点,默认凌晨 4点
    deleteWhen=04
    #文件保留时间,默认 48 小时
    fileReservedTime=120
    #commitLog每个文件的大小默认1G
    mapedFileSizeCommitLog=1073741824
    #ConsumeQueue每个文件默认存30W条,根据业务情况调整
    mapedFileSizeConsumeQueue=300000
    #destroyMapedFileIntervalForcibly=120000
    #redeleteHangedFileInterval=120000
    #检测物理文件磁盘空间
    diskMaxUsedSpaceRatio=88
    #存储路径
    storePathRootDir=E:\cloud\RocketMQ\store\broker-a
    #commitLog 存储路径
    storePathCommitLog=E:\cloud\RocketMQ\store\broker-a\commitlog
    #消费队列存储路径存储路径
    storePathConsumeQueue=E:\cloud\RocketMQ\store\broker-a\consumequeue
    #消息索引存储路径
    storePathIndex=E:\cloud\RocketMQ\store\broker-a\index
    #checkpoint 文件存储路径
    storeCheckpoint=E:\cloud\RocketMQ\store\checkpoint
    #abort 文件存储路径
    abortFile=E:\cloud\RocketMQ\store\abort
    #限制的消息大小
    maxMessageSize=65536
    #flushCommitLogLeastPages=4
    #flushConsumeQueueLeastPages=2
    #flushCommitLogThoroughInterval=10000
    #flushConsumeQueueThoroughInterval=60000
    #Broker 的角色
    #- ASYNC_MASTER 异步复制Master
    #- SYNC_MASTER 同步双写Master
    #- SLAVE
    brokerRole=ASYNC_MASTER
    #刷盘方式
    #- ASYNC_FLUSH 异步刷盘
    #- SYNC_FLUSH 同步刷盘
    flushDiskType=ASYNC_FLUSH
    #checkTransactionMessageEnable=false
    #发消息线程池数量
    #sendMessageThreadPoolNums=128
    #拉消息线程池数量
    #pullMessageThreadPoolNums=128

修改boker-a-s.properties

#所属集群名字
    brokerClusterName=rocketmq-cluster
    #broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
    brokerName=broker-a-s
    #0 表示 Master,>0 表示 Slave
    brokerId=1
    #nameServer地址,分号分割
    namesrvAddr=127.0.0.1:9876;127.0.0.1:9875
    #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
    defaultTopicQueueNums=4
    #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    autoCreateTopicEnable=true
    #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    autoCreateSubscriptionGroup=true
    #Broker 对外服务的监听端口,
    listenPort=10931
    #删除文件时间点,默认凌晨 4点
    deleteWhen=04
    #文件保留时间,默认 48 小时
    fileReservedTime=120
    #commitLog每个文件的大小默认1G
    mapedFileSizeCommitLog=1073741824
    #ConsumeQueue每个文件默认存30W条,根据业务情况调整
    mapedFileSizeConsumeQueue=300000
    #destroyMapedFileIntervalForcibly=120000
    #redeleteHangedFileInterval=120000
    #检测物理文件磁盘空间
    diskMaxUsedSpaceRatio=88
    #存储路径
    storePathRootDir=E:\cloud\RocketMQ\store\broker-a-s
    #commitLog 存储路径
    storePathCommitLog=E:\cloud\RocketMQ\store\broker-a-s\commitlog
    #消费队列存储路径存储路径
    storePathConsumeQueue=E:\cloud\RocketMQ\store\broker-a-s\consumequeue
    #消息索引存储路径
    storePathIndex=E:\cloud\RocketMQ\store\broker-a-s\index
    #checkpoint 文件存储路径
    storeCheckpoint=E:\cloud\RocketMQ\store\checkpoint
    #abort 文件存储路径
    abortFile=E:\cloud\RocketMQ\store\abort
    #限制的消息大小
    maxMessageSize=65536
    #flushCommitLogLeastPages=4
    #flushConsumeQueueLeastPages=2
    #flushCommitLogThoroughInterval=10000
    #flushConsumeQueueThoroughInterval=60000
    #Broker 的角色
    #- ASYNC_MASTER 异步复制Master
    #- SYNC_MASTER 同步双写Master
    #- SLAVE
    brokerRole=SLAVE
    #刷盘方式
    #- ASYNC_FLUSH 异步刷盘
    #- SYNC_FLUSH 同步刷盘
    flushDiskType=ASYNC_FLUSH
    #checkTransactionMessageEnable=false
    #发消息线程池数量
    #sendMessageThreadPoolNums=128
    #拉消息线程池数量
    #pullMessageThreadPoolNums=128

boker-b和boker-b-s参照上面配置 注意端口

新建namesrv配置
namesrv-a.properties

listenPort=9876

namesrv-b.properties

listenPort=9875

修改启动命令

 runserver.cmd
     -server -Xms512m -Xmx512m -Xmn126m -XX:PermSize=128m -XX:MaxPermSize=320m
 runboker.cmd
     -server -Xms512m -Xmx512m -Xmn256m

启动程序都在bin目录

    mqnamesrv.cmd -c 你的配置文件所在位置/nameserver-a.properties
    mqnamesrv.cmd -c 你的配置文件所在位置/nameserver-b.properties
    mqbroker.cmd -c 你的配置文件所在位置/broker-a.properties
    mqbroker.cmd -c 你的配置文件所在位置/broker-b.properties
    mqbroker.cmd -c 你的配置文件所在位置/broker-a-s.properties
    mqbroker.cmd -c 你的配置文件所在位置/broker-b-s.properties
    
   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值