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