linux环境RocketMQ环境搭建以及springboot集成RocketMQ

1由于RocketMQ是有Java语言编写的所以要先安装jdk,以下为傻瓜式一键安装jdk1.8

yum install -y java-1.8.0-openjdk-devel.x86_64

2.上传最新的RocketMQ安装包并解压
(如果报错 -bash: unzip: 未找到命令,解决办法:yum install -y unzip zip)

unzip rocketmq-all-4.6.0-bin-release.zip

3.修改NameServer、Broker服务器内存
(1)进入rocketmq-all-4.6.0-bin-release.zip目录
(2)修改 bin目录下面的runserver.sh和runbroker.sh
(3)将 JAVA_OPT="${JAVA_OPT} -server –Xms8g –Xmx8g –Xmn8g" 修改为 JAVA_OPT="${JAVA_OPT} -server –Xms128m –Xmx128m –Xmn128m"

4. 启动NameServer(这里是进入rocketmq-all-4.6.0-bin-release文件执行改命令)
nohup sh bin/mqnamesrv &(加上&表示后台启动)

5.修改Broker的配置文件
conf目录下的broker.conf 文件添加代码namesrvAddr=127.0.0.1:9876(这是NameServer的ip加端口号多个用分号隔开)
brokerIP1 =本机ip(表示当前broker监听的IP,我的阿里服务器需要加,但虚拟机可以不用加)

6.启动mqbroker(这里是进入rocketmq-all-4.6.0-bin-release文件执行改命令)
nohup sh bin/mqbroker -c ./conf/broker.conf

7.启动成功了现在可以用Java代码调试了

**===============================================================================================**

RocketMQ–相关命令
启动NameServer(进入到rocketmq目录执行)
nohup sh bin/mqnamesrv & (后面加上& 表示后台启动)
启动mqbroker(进入到rocketmq目录执行)
nohup sh bin/mqbroker -c ./conf/broker.conf &
查看pid的命令
ps aux | grep broker

brokerIP1 当前broker监听的IP
brokerIP2 存在broker主从时,在broker主节点上配置了brokerIP2的话,broker从节点会连接主节点配置的brokerIP2来同步。

默认不配置brokerIP1和brokerIP2时,都会根据当前网卡选择一个IP使用,当你的机器有多块网卡时,很有可能会有问题。比如,我遇到的问题是我机器上有两个IP,一个公网IP,一个私网IP,结果默认选择的走公网IP,这是不正确的,我期望的是所有业务内部通信都走内网。

如何保证消息的顺序的问题?.
1 一个topic对应N个队列
2 生产者通过消息key投递到同一个队列中存放

3 消费者使用同一个线程去消费

kafka如何保证消息的顺序的问题?.
kafka (设置相同的消息key ,然后就会放在同一个partition里面,对应一个消费者)

(消费者注册消息监听器为MessageListenerOrderly,这样就可以保证消费端只有一个线程去消费消息)

集群原理
1、Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
2、每个Broker与Name Server集群中的所有节点建立长连接,定时注册Topic信息到所有Name Server。
3、Producer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,投消息到某个broker
4、Consumer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息。

**

masrt Broker 内存超过40% 就读写分离

kafka为什么效率高

kafka ack参数设置
0 不用broker的ack信息返回
1 等待leader 节点写到磁盘成功返回ack
-1 等到leader 节点写到磁盘 并且同步到所有follower节点 成功才返回ack
在这里插入图片描述
1 顺序读写
message是持久化的硬盘的,Kafka的message是不断追加到本地磁盘文件末尾的,顺序写,而不是随机的写入,每一个Partition其实都是一个文件 ,收到消息后Kafka会把数据插入到文件末尾,所以Kafka是不会删除数据的,每个消费者(Consumer)对Partition都有一个offset用来表示 读取到了第几条数据 。(一个Partition只能被一个消费者消费)
一是基于时间,二是基于partition文件大小。具体配置可以参看它的配置文档。

2 批处理
kafka客户端向broker 发送消息之前,会做一个消息累计,累积到一定的大小才会发送给broker ,可以提高了带宽利用率。

3 数据压缩
kafka客户端 是将数据压缩后才发送给broker,可以减少网络传输代价

4 零拷贝

在这里插入图片描述
传统模式下 消费者从磁盘里面读一个消息会经历以下阶段
从磁盘读 --》内核缓存区 --》用户缓存区 --》Socket缓存区 --》网卡发送给消费者

mmap 内存映射 让用户与内核环境实现恭喜虚拟内存,不需要将内核空间的数据拷贝到用户空间。

而kafka使用到了linux 的零拷贝技术,里面使用到了mmap内存映射+sendFile技术内核缓存区里面的数据直接拷贝到网卡发送给消费者,中间不需要内核空间用户空间的拷贝,达到了零拷贝

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值