RocketMQ2环境搭建(Linux)+springboot+netty+rocketmq测试_netty+rocketmq搭建消息-程序员宅基地

技术标签: Linux集群搭建  RocketMQ  Rocketmq  

 

简介

阿里出品,性能高但可视化页面太low,商用的的话,要求真正的懂她(阿里有商用版,在阿里云可以购买)

集群支持

  RocketMQ天生对集群的支持非常友好

单Master:

  1. 优点:除了配置简单没什么优点
  2. 缺点:不可靠,该机器重启或宕机,将导致整个服务不可用

多Master:

  1. 优点:配置简单,性能最高
  2. 缺点:可能会有少量消息丢失(配置相关),单台机器重启或宕机期间,该机器下未被消费的消息在机器恢复前不可订阅,影响消息实时性
  3. 多Master多Slave异步模式:

  每个Master配一个Slave,有多对Master-Slave,集群采用异步复制方式,主备有短暂消息延迟,毫秒级

  1. 优点:性能同多Master几乎一样,实时性高,主备间切换对应用透明,不需人工干预
  2. 缺点:Master宕机或磁盘损坏时会有少量消息丢失

 

多Master多Slave同步模式:

  每个Master配一个Slave,有多对Master-Slave,集群采用同步双写方式,主备都写成功,向应用返回成功

  1. 优点:服务可用性与数据可用性非常高
  2. 缺点:性能比异步集群略低,当前版本主宕备不能自动切换为主。

  需要注意的是,在RocketMQ里面,1台机器只能要么是Master,要么是Slave。这个在初始的机器配置里面,就定死了。不会像kafka那样存在master动态选举的功能。其中Master的broker id = 0,Slave的broker id > 0。有点类似于mysql的主从概念,master挂了以后,slave仍然可以提供读服务,但是由于有多主的存在,当一个master挂了以后,可以写到其他的master上。

 

集群搭建:2M-2S-SYNC(两主两从同步写)

环境准备

  1. 环境准备:rocket-4.7.0 ,JDK1.8 并配置好环境变量

 

  1. 定好4个节点的端口,我这里主节点为默认10911,从节点设置成 10950,另外nameserver都是默认9876端口,别忘了设置防火墙。
  2. 两台主机分别是192.168.1.88,192.168.1.98(4个节点)

修改参数和创建数据存储路径

设置好节点的数据存储路径

mkdir      /opt/rocketmq/rocketmq/data

mkdir      /opt/rocketmq/rocketmq/data /store 存储路径

mkdir      /opt/rocketmq/rocketmq/data /store/commitlog //commitLog 存储路径

mkdir      /opt/rocketmq/rocketmq/data a/store/consumequeue //消费队列存储路径存储路径

mkdir      /opt/rocketmq/rocketmq/data /store/index //消息索引存储路径

 

记得修改两台机器上的 runbroker.sh 与 runserver.sh 的虚拟机参数。

runbroker.sh:

 

 

runserver.sh

修改xml文件配置:

进出$ROCKETMQ-HOME/conf目录执行如下命令:

sed -i 's#${user.home}#/opt/rocketmq/rocketmq#g' *.xml

192.168.1.88主机

用于broker-a的主,broker-b的从,分别对应如下2个文件:

${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-a.properties

${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-b-s.properties

Ps

建议在/etc/hosts配置域名,在以下文件中使用域名

 

broker-a.properties

brokerClusterName=DefaultCluster

brokerName=broker-a

brokerId=0

deleteWhen=04

fileReservedTime=48

brokerRole=SYNC_MASTER

flushDiskType=ASYNC_FLUSH

namesrvAddr=192.168.1.88:9876;192.168.1.98:9876

#store存储路径,master与slave目录要不同

storePathRootDir=/opt/rocketmq/rocketmq/data/store

#commitLog存储路径

storePathCommitLog=/opt/rocketmq/rocketmq/data/store/commitlog

brokerIP1=192.168.1.88

#很重要 slave通信用

brokerIP2=192.168.1.88

 

 

broker-b-s.properties

brokerClusterName=DefaultCluster

brokerName=broker-b

brokerId=1

brokerIP1=192.168.1.88

deleteWhen=04

listenPort=10950

fileReservedTime=48

brokerRole=SLAVE

flushDiskType=ASYNC_FLUSH

namesrvAddr=192.168.1.88:9876;192.168.1.98:9876

storePathRootDir=/opt/rocketmq/rocketmq/data/store/slave

storePathCommitLog=/opt/rocketmq/rocketmq/data/store/slave/commitlog

 

然后分别执行:

nohup sh mqnamesrv &

nohup sh mqbroker -c ../conf/2m-2s-sync/broker-a.properties  &

nohup sh mqbroker -c ../conf/2m-2s-sync/broker-b-s.properties  &

192.168.1.98主机

用于broker-b的主,broker-a的从,分别对应如下2个文件:

${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-a-s.properties

${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-b.properties

broker-a-s.properties

brokerClusterName=DefaultCluster

brokerName=broker-a

listenPort=10950

brokerId=1

deleteWhen=04

fileReservedTime=48

brokerIP1=192.168.1.98

brokerRole=SLAVE

namesrvAddr=192.168.1.88:9876;192.168.1.98:9876

storePathRootDir=/opt/rocketmq/rocketmq/data/store/slave

storePathCommitLog=/opt/rocketmq/rocketmq/data/store/slave/commitlog

flushDiskType=ASYNC_FLUSH

 

 

broker-b.properties

brokerClusterName=DefaultCluster

brokerName=broker-b

brokerId=0

brokerIP1=192.168.1.98

deleteWhen=04

fileReservedTime=48

namesrvAddr=192.168.1.88:9876;192.168.1.98:9876

storePathRootDir=/opt/rocketmq/rocketmq/data/store

storePathCommitLog=/opt/rocketmq/rocketmq/data/store/commitlog

brokerRole=SYNC_MASTER

flushDiskType=ASYNC_FLUSH

brokerIP2=192.168.1.98

 

配置详解

//集群名称,如果多个master,那么每个master配置的名称应该一致,要不然识别不了

brokerClusterName=rocketmq-cluster

//broker名称

brokerName=broker-a

//0 表示master,>0 表示slave

brokerId=0

//nameServer地址,分号隔开,生产环境使用域名(好维护)

namesrvAddr=192.168.5.100:9876;192.168.5.101:9876

//在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

defaultTopicQueueNums=4

//是否允许broker自动创建topic,建议线下开启,线上关闭

autoCreateTopicEnable=true

//是否允许broker自动创建订阅组,建议线下开始,线上关闭

autoCreateSubscriptionGroup=true

//broker对外服务的监听端口,

//同一台机器部署多个broker,端口号要不同,且端口号之间要相距大些(主节点)

listenPort=10911

//删除文件的时间节点,默认凌晨4点

deleteWhen=04

//文件保留时间,默认48小时

fileReservedTime=48

//commitLog每个文件的大小,默认大小1g

mapedFileSizeCommitLog=1073741824

//consumeQueue每个文件默认存30w条,根据自身业务进行调整

mapedFileSizeConsumeQueue=300000

destroyMapedFileInterval=120000

redeleteHangedFileInterval=120000

//检查物理文件磁盘空间

diskMaxUsedSpaceRatio=88

//store存储路径,master与slave目录要不同

storePathRootDir=/mysoft/rocketmq/data/store

//commitLog存储路径

storePathCommitLog=/mysoft/rocketmq/data/store/commitlog

//限制的消息大小

maxMessageSize=65536

flushCommitLogLeastPages=4

flushConsumeQueueLeastPages=2

flushCommitLogThoroughInterval=10000

flushConsumeQueueThoroughInterval=60000

checkTransactionMessageEnable=false

//发消息线程池数

sendMessageThreadPoolNums=128

//拉去消息线程池数

pullMessageThreadPoolNums=128

//broker角色:

//ASYSC_MASTER 异步复制master

//SYSC_MASTER 同步复制master

//SLAVE 从

brokerRole=SYSC_MASTER

///刷盘方式

//ASYNC_FLUSH 异步刷盘

//SYNC_FLUSH 同步刷盘

flushDiskType=ASYNC_FLUSH

启动

nohup sh mqnamesrv &

nohup sh mqbroker -c ../conf/2m-2s-sync/broker-a-s.properties  &

nohup sh mqbroker -c ../conf/2m-2s-sync/broker-b.properties  &

验证

sh mqadmin clusterlist -n 192.168.1.88:9876

 

配置参考

Broker参数

 

■Broker配置参数

 

 

 

#

参数名

默认值

说明

2

listenPort

10911

broker的服务端口号,作为对producer和consumer使用服务的端口号

3

namesrvAddr

null

namesrv的ip地址。格式: ip:port;ip:port

4

brokerIP1

本机IP

broker所在的机器ip,默认不用设置,如果机器有多个网卡,需要手动设置

5

brokerName

本机主机名

作用为一组master与slave通过brokerName是否相同来标示,通过brokerId来区分master还是slave

6

brokerClusterName

DefaultCluster

整个broker集群的名字,创建topic时需要指定。

7

brokerId

0

0:master 非0:slave

8

storePathCommitLog

$HOME/store/commitlog/

commitLog存储路径

9

storePathConsumerQueue

$HOME/store/consumequeue/

消费队列存储路径

10

mapedFileSizeCommitLog

1024 * 1024 * 1024(1G)

commitLog每个文件的大小,默认1G

11

deleteWhen

4

删除文件时间点,默认凌晨 4点

12

fileReservedTime

72

文件保留时间,默认72小时.

13

brokerRole

ASYNC_MASTER

Broker 的角色
ASYNC_MASTER 异步复制Master
SYNC_MASTER 同步双写Master
SLAVE

14

flushDiskType

ASYNC_FLUSH

刷盘方式
ASYNC_FLUSH 异步刷盘
SYNC_FLUSH 同步刷盘

15

defaultTopicQueueNums

4

在发送消息时,自动创建服务器不存在的topic,默认创建的队列数。

16

autoCreateTopicEnable

true

是否自动创建topic。

17

autoCreateSubscriptionGroup

true

是否允许Broker自动创建订阅组,建议线下开启,线上关闭

18

rejectTransactionMessage

false

是否拒绝事务消息接入

19

etchNamesrvAddrByAddressServer

false

是否从web服务器获取Name Server地址,针对大规模的Broker集群建议使用这种方式

20

storePathIndex

$HOME/store/index

消息索引存储路径

21

storeCheckpoint

$HOME/store/checkpoint

checkpoint文件存储路径

22

abortFile

$HOME/store/abort

abort文件存储路径

23

maxTransferBytesOnMessageInMemory

262144

单次Pull消息(内存)传输的最大字节数

24

maxTransferCountOnMessageInMemory

32

单次Pull消息(内存)传输的最大条数

25

maxTransferBytesOnMessageInDisk

65536

单次Pull消息(磁盘)传输的最大字节数

26

maxTransferCountOnMessageInDisk

8

单次Pull消息(磁盘)传输的最大条数

27

messageIndexEnable

true

是否开启消息索引功能

28

messageIndexSafe

false

是否提供安全的消息索引机制,索引保证不丢

29

haMasterAddress

 

在Slave上直接设置Master地址,默认从Name Server上自动获取,也可以手工强制配置

30

cleanFileForciblyEnable

true

磁盘满、且无过期文件情况下 TRUE 表示强制删除文件,优先保证服务可用 FALSE 标记服务不可用,文件不删除

 

Consumer参数

 

DefaultMQProducer、TransactionMQProducer、DefaultMQPushConsumer、DefaultMQPullConsumer都继承与ClientConfig类,


ClientConfig为客户端的公共配置类。客户端的配置都是get、set形式,每个参数都可以用spring来配置,也可以在代码中配置,
例如namesrvAddr这个参数可以这样配置,其他参数同理。
producer.setNamesrvAddr("192.168.0.1:9876");

■客户端的公共配置

 

 

 

#

参数名

默认值

说明

1

namesrvAddr

 

Name Server地址列表,多个NameServer地址用分号隔开

2

clientIP

本机IP

客户端本机IP地址,某些机器会发生无法识别客户端IP地址情况,需要应用在代码中强制指定

3

instanceName

DEFAULT

客户端实例名称,客户端创建的多个Producer、Consumer实际是共用一个内部实例(这个实例包含网络连接、线程资源等)

4

clientCallbackExecutorThreads

4

通信层异步回调线程数

5

pollNameServerInteval

30000

轮询Name Server间隔时间,单位毫秒

6

heartbeatBrokerInterval

30000

向Broker发送心跳间隔时间,单位毫秒

7

persistConsumerOffsetInterval

5000

持久化Consumer消费进度间隔时间,单位毫秒

 

 

Producer参数

 

■Producer配置

#

参数名

默认值

说明

1

producerGroup

DEFAULT_PRODUCER

Producer组名,多个Producer如果属于一个应用,发送同样的消息,则应该将它们归为同一组

2

createTopicKey

TBW102

在发送消息时,自动创建服务器不存在的topic,需要指定Key。

3

defaultTopicQueueNums

4

在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

4

sendMsgTimeout

10000

发送消息超时时间,单位毫秒

5

compressMsgBodyOverHowmuch

4096

消息Body超过多大开始压缩(Consumer收到消息会自动解压缩),单位字节

6

retryAnotherBrokerWhenNotStoreOK

FALSE

如果发送消息返回sendResult,但是sendStatus!=SEND_OK,是否重试发送

7

maxMessageSize

131072

客户端限制的消息大小,超过报错,同时服务端也会限制

8

transactionCheckListener

 

事务消息回查监听器,如果发送事务消息,必须设置

9

checkThreadPoolMinSize

1

Broker回查Producer事务状态时,线程池大小

10

checkThreadPoolMaxSize

 

Broker回查Producer事务状态时,线程池大小

11

checkRequestHoldMax

2000

Broker回查Producer事务状态时,Producer本地缓冲请求队列大小

 

 

 

 

■Push Consumer配置

 

 

 

#

参数名

默认值

说明

1

consumerGroup

DEFAULT_CONSUMER

Consumer组名,多个Consumer如果属于一个应用,订阅同样的消息,且消费逻辑一致,则应该将它们归为同一组

2

messageModel

CLUSTERING

消息模型,支持以下两种
1、集群消费(CLSUTER)
2、广播消费(BROADCASTING)

3

consumeFromWhere

CONSUME_FROM_LAST_OFFSET

Consumer启动后,默认从什么位置开始消费
1、CONSUME_FROM_LAST_OFFSET:默认策略,从该队列最尾开始消费,即跳过历史消息
2、CONSUME_FROM_FIRST_OFFSET:从队列最开始开始消费,即历史消息(还储存在broker的)全部消费一遍
3、CONSUME_FROM_TIMESTAMP:从某个时间点开始消费,和setConsumeTimestamp()配合使用,默认是半个小时以前

4

allocateMessageQueueStrategy

AllocateMessageQueueAveragely

Rebalance算法实现策略

5

subscription

{}

订阅关系

6

messageListener

 

消息监听器

7

offsetStore

 

消费进度存储

8

consumeThreadMin

10

消费线程池数量

9

consumeThreadMax

20

消费线程池数量

10

consumeConcurrentlyMaxSpan

2000

单队列并行消费允许的最大跨度

11

pullThresholdForQueue

1000

拉消息本地队列缓存消息最大数

12

pullInterval

0

拉消息间隔,由于是长轮询,所以为0,但是如果应用为了流控,也可以设置大于0的值,单位毫秒

13

consumeMessageBatchMaxSize

1

批量消费,一次消费多少条消息

14

pullBatchSize

32

批量拉消息,一次最多拉多少条

 

 

 

 

■Pull Consumer配置

 

 

 

#

参数名

默认值

说明

1

consumerGroup

DEFAULT_CONSUMER

Consumer组名,多个Consumer如果属于一个应用,订阅同样的消息,且消费逻辑一致,则应该将它们归为同一组

2

brokerSuspendMaxTimeMillis

20000

长轮询,Consumer拉消息请求在Broker挂起最长时间,单位毫秒

3

consumerTimeoutMillisWhenSuspend

30000

长轮询,Consumer拉消息请求在Broker挂起超过指定时间,客户端认为超时,单位毫秒

4

consumerPullTimeoutMillis

10000

非长轮询,拉消息超时时间,单位毫秒

5

messageModel

BROADCASTING

消息模型,支持以下两种
1、集群消费
2、广播消费

6

messageQueueListener

 

监听队列变化

7

offsetStore

 

消费进度存储

8

registerTopics

[]

注册的topic集合

9

allocateMessageQueueStrategy

AllocateMessageQueueAveragely

Rebalance算法实现策略

 

Meesage数据结构

 

Message数据结构各个字段都可以通过get、set方式访问,例如访问topic:
msg.getTopic();
msg.setTopic("test");

字段名

默认值

必填

说明

Topic

null

线下环境不需要申请,线上环境需要申请后才能使用

Body

null

二进制形式,序列化由应用决定,Producer与Consumer要协商好序列化形式。

Tags

null

 

类似于Gmail为每封邮件设置的标签,方便服务器过滤使用。目前只支持每个消息设置一个tag,所以也可以类比为Notify的MessageType概念。

Keys

null

 

代表这条消息的业务关键词,服务器会根据keys创建哈希索引,设置后,可以再Console系统根据Topic、Keys来查询消息,由于是哈希索引,请尽可能保证key唯一,例如订单号,商品ID等。

Flag

0

 

完全由应用来设置,RocketMQ不做敢于。

DelayTimeLevel

0

 

消息延时级别,0表示不延时,大于0会延时特定的时间才会被消费。

WaitStoreMsgOK

TRUE

 

表示消息是否在服务器罗盘后才返回应答。

 

Java代码测试

Springboot+netty+rocketmq测试

配置:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.32.Final</version>
</dependency>

<!--rocketMq依赖-->
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>2.0.3</version>
</dependency>

效果

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhuhaoyu6666/article/details/106789359

智能推荐

网络编程-select,poll.epoll区别于联系_select/poll/epoll-程序员宅基地

文章浏览阅读2.1w次,点赞23次,收藏110次。select,poll,epoll都是IO多路复用中的模型。再介绍他们特点时,先来看看多路复用的 模型。 同其他IO的不同的是,IO多路复用一次可以等多个文件描述符。大大提高了等待数据准备好的时间的效率。为了完成等的效率,系统提供了三个系统调用:select,poll,epoll。 这里不再讲述三者具体实现,只总结三者的优缺点。select的缺点1.单个进程监控的文件描述符有限,通..._select/poll/epoll

动手学PyTorch | (55) 束搜索-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏11次。上⼀节介绍了如何训练输入和输出均为不定⻓序列的编码器—解码器。本节我们介绍如何使用编码器—解码器来预测不定⻓长的序列。上⼀节里已经提到,在准备训练数据集时,我们通常会在样本的输⼊序列和输出序列后⾯分别附上⼀个特殊符号"<eos>"表示序列的终止。我们在接下来的讨论中也将沿用上一节的全部数学符号。为了便于讨论,假设解码器的输出是一段⽂本序列。设输出⽂本词典 (包含特殊符号"<e..._束搜索

【leetcode】 123. 买卖股票的最佳时机 III。 「动态规划」_最佳时机买卖股票3假设你有一个数组,其中的第i个元素两笔交易。注意:您不能同时进-程序员宅基地

文章浏览阅读102次。给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入:prices = [3,3,5,0,0,3,1,4]输出:6解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。 随后,在第 7 天(股票价格 = 1)的时候买入,在第 ..._最佳时机买卖股票3假设你有一个数组,其中的第i个元素两笔交易。注意:您不能同时进

杂谈-java8如何生成时间戳_带小数点时间截-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏3次。代码实现 public static void main(String[] args) { LocalDateTime now=LocalDateTime.now(); //年月日时分秒毫秒 System.out.println(now.format(DateTimeFormatter.ofPattern("yyyymmddHHmmssSSS"))..._带小数点时间截

Linux下编辑文件并保存_linux编辑模式下保存-程序员宅基地

文章浏览阅读1.1k次。第一步:cd到该文件的目录下第二步:vi 要编辑的文件名,进入普通模式,(可以查看文件内容)第三步:输入 i 进入编辑模式,开始编辑文本第四步:编辑之后,按ESC退出到普通模式。第五步:在普通模式下,输入 : 进入命令模式第六步:在命令模式下输入wq, 即可保存并退出..._linux编辑模式下保存

全球及中国应用控制网关行业竞争格局分析与投资战略规划研究报告2022-2027年_2022-2027年中国边缘计算网关行业市场前瞻与投资战略规划分析报告下载-程序员宅基地

文章浏览阅读1.9k次。全球及中国应用控制网关行业竞争格局分析与投资战略规划研究报告2022-2027年详情内容请咨询鸿晟信合研究院!【全新修订】:2022年3月【撰写单位】:鸿晟信合研究网2021年全球应用控制网关市场规模大约为 亿元(人民币),预计2028年将达到 亿元,2022-2028期间年复合增长率(CAGR)为 %。未来几年,本行业具有很大不确定性,本文的2022-2028年的预测数据是基于过去几年的历史发展、行业专家观点、以及本文分析师观点,综合给出的预测。2021年中国占全球市场份额为 %,美国为 _2022-2027年中国边缘计算网关行业市场前瞻与投资战略规划分析报告下载

随便推点

FeignClient整合Sentinel报错_no fallbackfactory instance of type class cn.itcas-程序员宅基地

文章浏览阅读817次。启动报错:No fallbackFactory instance of type class_no fallbackfactory instance of type class cn.itcast.feign.clients.fallback.u

BAT脚本,批量替换文件名的指定字符_bat替换文件名中几个字符-程序员宅基地

文章浏览阅读2.3k次。记录一下批量替换文件名称的bat脚本。_bat替换文件名中几个字符

原点安全携“金融机构消费者个人信息保护解决方案”亮相 2023 中国金融数字化转型发展大会-程序员宅基地

文章浏览阅读1.6k次,点赞39次,收藏38次。6 月 7 日,由中国金融电子化集团有限公司、南京市建邺区人民政府、中国人民银行南京分行主办,主题为“数驱转型 智创未来”的于南京国际博览中心隆重召开。!本次会议活动为期三天,7日上午开幕式上,中国金融电子化集团有限公司党委委员、副总经理潘润红博士主持开场,中国人民银行南京分行行长郭新明、南京市人民政府办公厅主任刘永辉、中国银行业协会首席信息官高峰、中国金融电子化集团有限公司董事长周逢民等领导出席开幕式并致辞,由董事长周逢民宣布本次会议开幕。

ssm 执行查询语句报Configuration problem: Failed to import bean definitions from URL location ,更新语句正常,为何??-程序员宅基地

文章浏览阅读5.6k次。_configuration problem: failed to import bean definitions from url location [

vue两个按钮切换_在vue中实现多个按钮样式的点击切换?-程序员宅基地

文章浏览阅读4.7k次。1.在vue中实现多个按钮样式的点击切换?有多个按钮,点击其中一个出现下划线,而另一个回到原始状态。点击其中一个两个同时出现下划线样式:再次点击两个都还原成最初的样式,即有下划线:如何实现只有被点击的那一个才会出现下划线样式?这个我写的代码// 请把代码文本粘贴到下方(请勿用图片代替代码)短信验证邮箱验证import HeaderTop from '../../components/HeaderT..._vue 多个提交按钮怎么切换

flume 监听端口数据案例_flume配置listen-程序员宅基地

文章浏览阅读467次。flume 监听本地端口数据_flume配置listen

推荐文章

热门文章

相关标签