Docker 部署 RocketMQ 双主双从模式( 版本v4.7.0)
文章转载自:http://www.mydlq.club/article/96/
系统环境:
- 系统版本:CentOS 7.8
- RocketMQ 版本:4.7.0
- Docker 版本:19.03.13
一、RocketMQ 简介
RocketMQ是一个纯 Java、分布式、队列模型的开源消息中间件,前身是 MetaQ,是阿里参考 Kafka 特点研发的一个队列模型的消息中间件,后开源给 Apache 基金会成为了 Apache 的顶级开源项目,具有高性能、高可靠、高实时、分布式特点。
二、RocketMQ 需部署的组件
这里介绍下 RocketMQ 相关的组件:
- 名字服务(Name Server): 是一个几乎无状态节点,可集群部署,集群节点间相互独立没有信息交换。其功能主要为更新和发现 Broker 服务,生产者或消费者能够通过其查找到各主题相应的 Broker IP 列表。
- 代理服务(Broker Server): 消息中转角色,负责存储消息,转发消息。分为 Master Broker 和 Slave Broker,一个 Master Broker 可以对应多个 Slave Broker,但是一个 Slave Broker 只能对应一个 Master Broker。Broker 启动后需要完成一次将自己注册至 Name Server 的操作,随后每隔 30s 定期 向Name Server 上报 Topic 路由信息。
- 生产者: 与 Name Server 集群中的其中一个节点(随机)建立长链接(Keep-alive),定期从 Name Server 读取 Topic 路由信息,并向提供 Topic 服务的 Master Broker 建立长链接,且定时向 Master Broker 发送心跳。
- 消费者: 与 Name Server 集群中的其中一个节点(随机)建立长连接,定期从 Name Server 拉取 Topic 路由信息,并向提供 Topic 服务的 Master Broker、Slave Broker建立长连接,且定时向 Master Broker、Slave Broker 发送心跳。Consumer 既可以从 Master Broker 订阅消息,也可以从 Slave Broker 订阅消息,订阅规则由 Broker 配置决定。
- 控制台(console): RocketMQ 的 Web 可视化控制台,包含 RocketMQ 常用操作,可以用于简单管理 RocketMQ 平台。
三、RocketMQ 常用部署模式
RocketMQ 常用部署方案有以下几种:
- 单机模式
- 多主模式
- 双主双从/多主多从模式(异步复制)
- 双主双从/多主多从模式(同步双写)
- Dledger 集群模式
(1)、单机模式
这种模式就如该名单机模式一样,就是部署单个 RocketMQ Broker 来使用,一般使用这种方式在生产中风险较大,一旦 Broker 重启或者宕机时,会导致整个服务不可用,所以常常在学习、开发过程中才会使用这种模式。
优缺点分析:
优点: 本地开发测试,配置简单,同步刷盘消息不会丢失。
缺点: 不可靠,如果宕机会导致服务不可用。
(2)、多主模式
全部由 Broker Master 节点组成(即可能部署两个或者更多 Broker),生产者发送的数据会分别存入不同的 Broker 中,这样能够避免某个 Broker 一直接收处理数据从而负载过高。
优缺点分析:
优点: 性能高,配置简单,单个 Master 宕机或重启维护对应用无影响,在磁盘配置为 RAID10 时,即使机器宕机不可恢复,由于 RAID10 磁盘非常可靠,消息也不会丢(异步刷盘可能会丢失少量消息,同步刷盘能保证消息不丢)。
缺点: 单台服务器宕机期间,不可订阅该服务器上未被消费者消费的消息,只有机器恢复后才可恢复订阅,所以可能会影响消息的实时性。
(3)、双主双从/多主多从模式(异步复制)
一般会部署多个 Broker Master,同时也会为各个 Broker Master 部署一个或者多个 Broker Slave,且 Master 和 Slave 之间采用"异步复制数据"方式进行数据同步(主从同步消息会有延迟,毫秒级),这样在生产者将消息发送到 Broker Master 后不必等待数据同步到 Slave 节点,就返回成功。
优缺点分析:
优点: 性能高,且磁盘损坏也不会丢失大量消息,消息实时性不会受影响,Master 宕机后,消费者仍然可以从 Slave 消费。
缺点: 主备有短暂消息延迟,毫秒级,如果Master宕机,磁盘损坏情况,会丢失少量消息。
(4)、双主双从/多主多从模式(同步双写)
一般会部署多个 Broker Master,同时也会为各个 Broker Master 部署一个或者多个 Broker Slave,且 Master 和 Slave 之间采用"同步复制数据"方式进行数据同步,这样在生产者将消息发送到 Broker Master 后需要等待数据同步到 Slave 节点成功后,才返回成功。
优缺点分析:
优点: 数据与服务都无单点故障,Master 宕机情况下,消息无延迟,服务可用性与数据可用性都非常高;
缺点: 性能比异步复制模式略低(大约低10%左右),发送单个消息的 RT 会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。
(5)、Dledger 集群模式
RocketMQ-on-DLedger Group 是指一组相同名称的 Broker,至少需要 3 个节点,通过 Raft 自动选举出一个 Leader,其余节点 作为 Follower,并在 Leader 和 Follower 之间复制数据以保证高可用。当 Master 节点出现问题宕机后也能自动容灾切换,并保证数据一致性。该模式也支持 Broker 水平扩展,即可以部署任意多个 RocketMQ-on-DLedger Group 同时对外提供服务。
优缺点分析:
优点: 多节点(至少三个)组成集群,其中一个为 Leader 节点,其余为 Follower 节点组成高可用,能够自动容灾切换。
缺点: 需要 RocketMQ 4.5 及以后版本才支持。
四、RocketMQ 常见概念介绍
1、异步复制与同步复制
在使用 RocketMQ 中,生产者集群将数据传入到 Broker Master 节点后,Master 节点会将数据同步到 Slave 节点,其有两种同步方式:
- 异步复制(SYNC_MASTER): 生产者将数据发送到 Broker Master 节点后,Master 会直接使用异步方式将数据同步到 Slave 节点,然后不等待 Slave 节点响应接收成功就直接告知生产者消息接收成。
- 同步双写(SYNC_MASTER): 生产者将数据发送到 Broker Master 节点后,Master 会使用同步方式将数据同步到 Slave 节点,然后等待 Slave 节点响应接收数据成功,然后再告知生产者消息接收成。
2、同步刷盘与异步刷盘
在使用 RocketMQ 中,生产者集群将数据传入到 Broker 后,Broker 会将数据进行持久化操作,其因性能与数据安全性等原因,所以提供两种方式将数据持久化到硬盘,两种刷盘方式分别是:
- 同步刷盘(SYNC_FLUSH): 生产者发送的每一条消息都在保存到磁盘成功后才返回告诉生产者消息发送成功。这种方式不会存在消息丢失的问题,但是有很大的磁盘 IO 开销,对性能产生一些影响。
- 异步刷盘(ASYNC_FLUSH): 生产者发送的每一条消息并不是立即保存到磁盘,而是暂时缓存到内存,然后就立即返回生产者,告知其消息发送成功。随后再异步的将缓存数据保存到磁盘,这里分两种情况:(1)、定期将缓存中更新的数据进行刷盘。(2)、当缓存中更新的数据条数达到某一设定值后进行刷盘。需要注意的是,这种方式都存在消息可能丢失情况(在还未来得及同步到磁盘的时候宕机),不过由于其性能比"同步刷盘"要好,所以大多情况下都会选择这种刷盘方式,且该方式也是 RocketMQ 的默认刷盘方式。
3、双主双从/多主多从模式
一般会部署多个 Broker Master,同时也会为各个 Broker Master 部署一个或者多个 Broker Slave,不过需要注意的是,当 Broker Master 宕机后,Broker Slave 并不能转换为 Master 节点,这里的 Slave 只会起到数据备份以及 Broker Master 宕机时间内消费者能够继续消费宕机前生产者发送到 Broker Master 的数据。
多主多从模式下的 Broker 之间会进行数据同步,其中同步方式可以是"异步复制",也可以是"同步复制"。这其中也会涉及数据持久化刷盘方式,刷盘方式也是分为"同步刷盘"与"异步刷盘"两种,数据复制与刷盘方式上面都有介绍,这里就不再陈述。这里主要要说的是其不同的"数据复制"与"刷盘方式"对性能的影响。例如,生产者将数据发送到 Broker 后,如果为"同步刷盘"那么只有将数据写入磁盘成功后才能响应成功。如果为"异步刷盘"那么将数据写入内存中即可返回成功。其中"同步刷盘"对性能影响较大。
使用多主多从模式部署 RocketMQ 的 Broker,一般我们大部分都会选择"同步复制","异步刷盘"方式的组合进行部署,当然,如果对数据安全性要求不是很高,可以选择"异步复制"与"异步刷盘"方式来部署 Broker。
4、Broker 常用配置参数简介
参数名 | 默认值 | 描述 |
---|---|---|
listenPort | 10911 | 监听端口 |
namesrvAddr | Namesrv 地址 | |
brokerIP1 | 用于网络接口的 InetAddress | 指定 Broker 的 IP 地址,向 Namesrv 注册时候会注册此地址 |
brokerName | Broker 名称 | |
brokerClusterName | 指定 Broker 归属的集群的名称 | |
brokerId | 0 | Broker ID, 0 表示 Master,大于 0 表示 Slave |
storePathCommitLog | $HOME/store/commitlog/ | commitlog 的文件存储路径 |
storePathConsumerQueue | $HOME/store/consumequeue/ | comsumer queue 的文件存储路径 |
mapedFileSizeCommitLog | 1024 * 1024 * 1024(1G) | commitlog 映射文件大小 |
deleteWhen | 04 | 磁盘文件空间充足情况下,默认每天什么时候执行删除过期文件,默认 04 表示凌晨 4 点 |
fileReserverdTime | 72 | 设置 commitlog 日志保留时间 |
brokerRole | ASYNC_MASTER | broker角色,分为 ASYNC_MASTER SYNC_MASTER, SLAVE |
flushDiskType | ASYNC_FLUSH | 刷盘方式,默认为 ASYNC_FLUSH(异步刷盘),可选值SYNC_FLUSH(同步刷盘) |
五、部署 RcoketMQ 双主双从模式(同步双写)
部署服务器安排
服务器 | 部署的应用 | 物理资源 | 存储目录 |
---|---|---|---|
192.168.2.21 | Namesrv Server、Broker、Console | 4C && 8G | /usr/local/rocketmq |
192.168.2.22 | Namesrv Server、Broker | 4C && 8G | /usr/local/rocketmq |
192.168.2.23 | Namesrv Server、Broker | 4C && 8G | /usr/local/rocketmq |
部署的内容如下图所示:
1、创建存储数据的目录
分别在 192.168.2.21、192.168.2.22 服务器上执行下面命令创建目录:
## 创建 Broker-Master 持久化目录
$ mkdir -p /usr/local/rocketmq/broker-master/conf && \
mkdir -p /usr/local/rocketmq/broker-master/logs && \
mkdir -p /usr/local/rocketmq/broker-master/store
## 创建 Broker-Slave 持久化目录
$ mkdir -p /usr/local/rocketmq/broker-slave/conf && \
mkdir -p /usr/local/rocketmq/broker-slave/logs && \
mkdir -p /usr/local/rocketmq/broker-slave/store
## 创建 NameServer 持久化目录
$ mkdir -p /usr/local/rocketmq/server/logs
2、创建 Broker 配置文件
在各个服务器上分别创建如下文件:
- 服务器 192.168.2.21: 创建 master-a、slave-b 配置文件
- 服务器 192.168.2.22: 创建 master-b、slave-a 配置文件
第一台服务器创建 master-a 配置:
$ cat > /usr/local/rocketmq/broker-master/conf/broker.conf << EOF
listenPort=10911
brokerIP1=192.168.2.21
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerRole=SYNC_MASTER
brokerId=0
deleteWhen=04
fileReservedTime=48
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.2.21:9876;192.168.2.22:9876
EOF
第一台服务器创建 slave-b 配置:
$ cat > /usr/local/rocketmq/broker-slave/conf/broker.conf << EOF
listenPort=11911
brokerIP1=192.168.2.21
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerRole=SLAVE
brokerId=1
deleteWhen=04
fileReservedTime=48
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.2.21:9876;192.168.2.22:9876
EOF
第二台服务器创建 master-b 配置:
$ cat > /usr/local/rocketmq/broker-master/conf/broker.conf << EOF
listenPort=10911
brokerIP1=192.168.2.22
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerRole=SYNC_MASTER
brokerId=0
deleteWhen=04
fileReservedTime=48
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.2.21:9876;192.168.2.22:9876
EOF
第二台服务器创建 slave-a 配置:
$ cat > /usr/local/rocketmq/broker-slave/conf/broker.conf << EOF
listenPort=11911
brokerIP1=192.168.2.22
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerRole=SLAVE
brokerId=1
deleteWhen=04
fileReservedTime=48
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.2.21:9876;192.168.2.22:9876
EOF
3、下载相关镜像
在两台服务器上,分别创建拉取对应的镜像:
- 服务器一 192.168.2.21: 拉取 rocketmq 与 rocketmq-console 镜像。
- 服务器二 192.168.2.22: 拉取 rocketmq 镜像。
两台服务器分别拉取 RocketMQ 镜像:
## 下载 RocketMQ 镜像
$ docker pull foxiswho/rocketmq:4.7.0
第一台服务器拉取 RocketMQ Console 镜像:
## 下载 RocketMQ 控制台
$ docker pull apacherocketmq/rocketmq-console:2.0.0
4、查看镜像设置的用户与组的配置
任意一台服务器上查看镜像 rocketmq 的组成,分析其中用户与组的信息:
$ docker history foxiswho/rocketmq:4.7.0
IMAGE CREATED CREATED BY SIZE
1cf46e8f03d0 7 months ago /bin/sh -c #(nop) WORKDIR /home/rocketmq/roc… 0B
<missing> 7 months ago /bin/sh -c #(nop) USER rocketmq 0B
<missing> 7 months ago |5 gid=3000 group=rocketmq uid=3000 user=roc… 1.92kB
<missing> 7 months ago |5 gid=3000 group=rocketmq uid=3000 user=roc… 0B
<missing> 7 months ago |5 gid=3000 group=rocketmq uid=3000 user=roc… 11.3kB
<missing> 7 months ago /bin/sh -c #(nop) EXPOSE 10909 10911 10912 0B
<missing> 7 months ago |5 gid=3000 group=rocketmq uid=3000 user=roc… 10.1kB
<missing> 7 months ago /bin/sh -c #(nop) EXPOSE 9876 0B
<missing> 7 months ago |5 gid=3000 group=rocketmq uid=3000 user=roc… 15.1MB
<missing> 7 months ago /bin/sh -c #(nop) COPY dir:bdc4a8518539da6ce… 11.4kB
<missing> 7 months ago |5 gid=3000 group=rocketmq uid=3000 user=roc… 15.1MB
<missing> 7 months ago /bin/sh -c #(nop) WORKDIR /home/rocketmq/roc… 0B
<missing> 7 months ago /bin/sh -c #(nop) ENV ROCKETMQ_HOME=/home/r… 0B
<missing> 7 months ago /bin/sh -c #(nop) ENV ROCKETMQ_VERSION=4.7.0 0B
<missing> 7 months ago /bin/sh -c #(nop) ARG version=4.7.0 0B
<missing> 7 months ago |4 gid=3000 group=rocketmq uid=3000 user=roc… 1.07MB
<missing> 7 months ago /bin/sh -c #(nop) ARG gid=3000 0B
<missing> 7 months ago /bin/sh -c #(nop) ARG uid=3000 0B
<missing> 7 months ago /bin/sh -c #(nop) ARG group=rocketmq 0B
<missing> 7 months ago /bin/sh -c #(nop) ARG user=rocketmq 0B
<missing> 7 months ago /bin/sh -c yum install -y java-1.8.0-openjdk… 264MB
<missing> 11 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 11 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 11 months ago /bin/sh -c #(nop) ADD file:45a381049c52b5664… 203MB
可以观察到:
- 组名:rocketmq,组ID:3000
- 用户名:rocketmq,用户ID:3000
5、更改目录归属组与用户与容器的配置一致
两台服务器上分别创建组与用户:
## 创建组
$ groupadd rocketmq
## 增加用户并加入组
$ useradd -g rocketmq rocketmq
## 设置用户密码
$ passwd rocketmq
## 更改组的 gid
$ groupmod -g 3000 rocketmq
## 更改用户的 uid
$ usermod -u 3000 rocketmq
## 查看是否更改成功
$ id rocketmq
两台服务器上分别更改上面创建的目录的权限为上面创建的组与用户:
$ chown -R rocketmq:rocketmq /usr/local/rocketmq
6、安装 RocketMQ NameServer
两台服务器上分别部署 NameServer:
$ docker run -d --name rmqnamesr --net host \
--restart=always \
-v /usr/local/rocketmq/server/logs:/home/rocketmq/logs \
-e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m" \
-p 9876:9876 \
foxiswho/rocketmq:4.7.0 \
sh mqnamesrv
7、安装 RocketMQ Broker
分别在两台服务器上执行下面命令,操作 Docker 启动 Broker Master 与 Broker Slave 节点:
- 服务器 192.168.2.21: Broker master-a、Broker slave-b
- 服务器 192.168.2.22: Broker master-b、Broker slave-a
slave 的配置已经配置在 RocketMQ 配置文件中
服务器一部署 Broker master-a,服务器二部署 Broker master-b 的 Docker 命令:
$ docker run -d --name rmqbroker-master \
--restart=always \
--net host \
-v /usr/local/rocketmq/broker-master/logs:/home/rocketmq/logs \
-v /usr/local/rocketmq/broker-master/store:/home/rocketmq/store \
-v /usr/local/rocketmq/broker-master/conf:/home/rocketmq/conf \
-p 10909:10909 -p 10911:10911 -p 10912:10912 \
-e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m" \
foxiswho/rocketmq:4.7.0 \
sh mqbroker -c /home/rocketmq/conf/broker.conf
服务器一部署 Broker slave-b,服务器二部署 Broker slave-a 的 Docker 命令:
$ docker run -d --name rmqbroker-slave \
--restart=always \
--net host \
-v /usr/local/rocketmq/broker-slave/logs:/home/rocketmq/logs \
-v /usr/local/rocketmq/broker-slave/store:/home/rocketmq/store \
-v /usr/local/rocketmq/broker-slave/conf:/home/rocketmq/conf \
-p 11909:11909 -p 11911:11911 -p 11912:11912 \
-e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m" \
foxiswho/rocketmq:4.7.0 \
sh mqbroker -c /home/rocketmq/conf/broker.conf
8、部署控制台
服务器一部署 RocketMQ 控制台:
$ docker run -d --name rmqconsole \
--restart=always \
-p 8080:8080 \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.2.21:9876;192.168.2.22:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false" \
apacherocketmq/rocketmq-console:2.0.0
9、访问控制台
输入 http://192.168.2.21:8080 访问在服务器一部署的 RocketMQ 控制台:
然后我们可以通过该控制台进行发送消息来验证 RocketMQ 是否正常,这里就交由大家自行验证了,文档到此结束。
Docker 部署 RocketMQ 双主双从模式( 版本v4.7.0)的更多相关文章
- Docker 部署 RocketMQ Dledger 集群模式( 版本v4.7.0)
文章转载自:http://www.mydlq.club/article/97/ 系统环境: 系统版本:CentOS 7.8 RocketMQ 版本:4.7.0 Docker 版本:19.03.13 一 ...
- Centos6.9下RocketMQ3.4.6高可用集群部署记录(双主双从+Nameserver+Console)
之前的文章已对RocketMQ做了详细介绍,这里就不再赘述了,下面是本人在测试和生产环境下RocketMQ3.4.6高可用集群的部署手册,在此分享下: 1) 基础环境 ip地址 主机名 角色 192. ...
- RocketMQ学习笔记(16)----RocketMQ搭建双主双从(异步复制)集群
1. 修改RocketMQ默认启动端口 由于只有两台机器,部署双主双从需要四个节点,所以只能修改rocketmq的默认启动端口,从官网下载rocketmq的source文件,解压后使用idea打开,全 ...
- 高可用Mysql架构_Mycat集群部署(HAProxy + 两台Mycat+Mysql双主双从)
既然大家都知道了Mysql分布式在大型网站架构中的作用,在这里就不再阐述.本片博客文章是基于我曾经搭建过的一个Mysql集群基础上实现的,实现过双主热备.读写分离.分库分表. 博客链接:http:// ...
- 在Docker下进行MyCAT管理双主双从MySQL集群
前言 在Docker下双主双从MySQL集群模拟 https://www.cnblogs.com/yumq/p/14259964.html 本文实验配置文件 Docker拉取MyCAT镜像 如果没启动 ...
- RocketMQ4.7.1双主双从集群搭建
导读 上一集我们已经学会了SpringBoot整合RocketMQ点我直达,今天我们来搭建双主双从高性能MQ服务集群. 简介 主从架构 Broker角色,Master提供读写,Slave只支持读,Co ...
- Mysql双主双从高可用集群的搭建且与MyCat进行整合
1.概述 老话说的好:瞻前顾后.患得患失只会让我们失败,下定决心,干就完了. 言归正传,之前我们聊了Mysql的一主一从读写分离集群的搭建,虽然一主一从或一主多从集群解决了并发读的问题,但由于主节点只 ...
- MySQL双主双从配置
双主双从结构图 Master1配置 server-id=1 #开启binlog日志 log-bin=mysql-bin #忽略的库 binlog-ignore-db=mysql #复制的库 binlo ...
- 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变
[Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...
随机推荐
- 高精度10m/30米NPP净初级生产力分布数据
数据下载链接:百度云下载链接 引言 第一性生产力是绿色植物呼吸后所剩下的单位面积单位时间内所固定的能量或所生产的有机物质,即是总第一性生产量减去植物呼吸作用所剩下的能量或有机物质.多种卫星遥感数据反 ...
- 【python】M3U8下载器脚本
[python]M3U8下载器脚本 脚本目标: 1. 输入M3U8文件的链接,得到视频 2.使用异步操作,这样可以快很多,不加锁,因为懒得写,而且影响不大 已知条件: 1.m3u8文件其实就是一个记录 ...
- AI写代码! 神器copilot介绍+安装+使用
!郑重提示!!!!!!!: 正在学编程.算法的同学请千万不要依赖此插件,否则你可能甚至无法手写出一个for循环 AI帮我写代码?我帮AI写代码?庄周梦蝶?蝶梦庄周?十分梦幻. copilot在VSco ...
- 使用Java客户端发送消息和消费的应用
体验链接:https://developer.aliyun.com/adc/scenario/fb1b72ee956a4068a95228066c3a40d6 实验简介 本教程将Demo演示使用jav ...
- firewall 命令简单操作
Firewalld 是维护防火墙策略的守护程序的名称.使用 firewall-cmd 命令与防火墙配置进行交互, 使用区域概念对与系统交互的流量进行分段.网络接口分配给一个或多个区域,每个区域都包含允 ...
- Bika LIMS 开源LIMS集—— SENAITE的使用(用户、角色、部门)
设置 添加实验室人员,系统用户 因为创建实验室时必须选择实验室经理/主任/负责人,因此需要先创建实验室经理人员. 创建人员时输入人员姓名,可上传签名图片. 创建实验室部门 输入实验室名称.代码,选择实 ...
- GDB技巧:使用终端界面模式
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 简 ...
- 官宣!DolphinScheduler 毕业成为 Apache 软件基金会顶级项目
全球最大的开源软件基金会 Apache 软件基金会(以下简称 Apache)于北京时间 2021年4月9日在官方渠道宣布Apache DolphinScheduler 毕业成为Apache顶级项目.这 ...
- MyBatis 01 概述
官网 http://www.mybatis.org/mybatis-3/zh/index.html GitHub https://github.com/mybatis/mybatis-3 简介 MyB ...
- Elasticsearch-Kibana-学习笔记
1.背景 1.1 简介 Elasticsearch 是一个分布式.高扩展.高实时的搜索与数据分析引擎.它能很方便的使大量数据具有搜索.分析和探索的能力.充分利用Elasticsearch的水平伸缩性, ...