xxl_job分片问题

sruby 发布于 2018/05/08 17:41
阅读 6K+
收藏 0

@许雪里 你好,想跟你请教个问题:

公司打算用xxl-job来做大量数据的分片处理。

我把xxl-job-executor-sample-spring在我本机部署了两个实例,配置了不同的端口。

调度中心也注册成功了。

但是我在执行分片任务处理的时候,虽然会分到两个不同的实例执行,但是日志显示的却是分片数量为1。文档中没有提到分片的策略,请问分片是按照执行器的实例数量来分片的吗?

2018-05-08 17:33:20 [com.xxl.job.core.thread.JobThread#run]-[123]-[Thread-13] 
----------- xxl-job job execute start -----------
----------- Param:1,2,3
2018-05-08 17:33:20 [com.xxl.job.executor.service.jobhandler.ShardingJobHandler#execute]-[25]-[Thread-13] 分片参数:当前分片序号 = 0, 总分片数 = 1
2018-05-08 17:33:20 [com.xxl.job.executor.service.jobhandler.ShardingJobHandler#execute]-[30]-[Thread-13] 第 0 片, 命中分片开始处理
2018-05-08 17:33:20 [com.xxl.job.core.thread.JobThread#run]-[128]-[Thread-13] 
----------- xxl-job job execute end(finish) -----------
----------- ReturnT:ReturnT [code=200, msg=null, content=null]

[Load Log Finish]

 

加载中
0
许雪里
许雪里

引用来自“达拉达纳达人”的评论

引用来自“许雪里”的评论

你好,分片是以当前执行器注册机器为粒度分片的。分片数为注册在线的执行器数量。 分片参数可以在调度中心任务日志备注里查看,会对任务触发是的环境参数做镜像备份,方便排查问题。

执行器的注册在线数量是2,但是调度日志中的执行日志显示还是1。

麻烦给看下是什么原因?

 

2018-05-08 18:59:20 [com.xxl.job.core.thread.JobThread#run]--[Thread-13] 
----------- xxl-job job execute start -----------
----------- Param:1,2,3
2018-05-08 18:59:20 [com.xxl.job.executor.service.jobhandler.ShardingJobHandler#execute]--[Thread-13] 分片参数:当前分片序号 = 0, 总分片数 = 1
2018-05-08 18:59:20 [com.xxl.job.executor.service.jobhandler.ShardingJobHandler#execute]--[Thread-13] 任务参数1,2,3
2018-05-08 18:59:20 [com.xxl.job.executor.service.jobhandler.ShardingJobHandler#execute]--[Thread-13] 第 0 片, 命中分片开始处理
2018-05-08 18:59:20 [com.xxl.job.core.thread.JobThread#run]--[Thread-13] 
----------- xxl-job job execute end(finish) -----------
----------- ReturnT:ReturnT [code=200, msg=null, content=null]

[Load Log Finish]

也看了代码,分片参数都是由XxlJobTrigger类中的以下两行设置,好像就一直都是0和1。不知道是不是我代码追溯的有问题?

triggerParam.setBroadcastIndex(0);
triggerParam.setBroadcastTotal(1);

你好,你的问题大概确认了。分片任务的路由策略需要设置为 “分片广播”。而从上图看你的路由策略选择的 “LFU最不经常使用”。可以参考下文档中路由策略章节。

0
许雪里
许雪里
你好,分片是以当前执行器注册机器为粒度分片的。分片数为注册在线的执行器数量。 分片参数可以在调度中心任务日志备注里查看,会对任务触发是的环境参数做镜像备份,方便排查问题。
许雪里
许雪里
该评论暂时无法显示,详情咨询 QQ 群:912889742
sruby
sruby
该评论暂时无法显示,详情咨询 QQ 群:912889742
0
sruby
sruby

引用来自“许雪里”的评论

你好,分片是以当前执行器注册机器为粒度分片的。分片数为注册在线的执行器数量。 分片参数可以在调度中心任务日志备注里查看,会对任务触发是的环境参数做镜像备份,方便排查问题。

执行器的注册在线数量是2,但是调度日志中的执行日志显示还是1。

麻烦给看下是什么原因?

 

2018-05-08 18:59:20 [com.xxl.job.core.thread.JobThread#run]--[Thread-13] 
----------- xxl-job job execute start -----------
----------- Param:1,2,3
2018-05-08 18:59:20 [com.xxl.job.executor.service.jobhandler.ShardingJobHandler#execute]--[Thread-13] 分片参数:当前分片序号 = 0, 总分片数 = 1
2018-05-08 18:59:20 [com.xxl.job.executor.service.jobhandler.ShardingJobHandler#execute]--[Thread-13] 任务参数1,2,3
2018-05-08 18:59:20 [com.xxl.job.executor.service.jobhandler.ShardingJobHandler#execute]--[Thread-13] 第 0 片, 命中分片开始处理
2018-05-08 18:59:20 [com.xxl.job.core.thread.JobThread#run]--[Thread-13] 
----------- xxl-job job execute end(finish) -----------
----------- ReturnT:ReturnT [code=200, msg=null, content=null]

[Load Log Finish]

也看了代码,分片参数都是由XxlJobTrigger类中的以下两行设置,好像就一直都是0和1。不知道是不是我代码追溯的有问题?

triggerParam.setBroadcastIndex(0);
triggerParam.setBroadcastTotal(1);

0
sruby
sruby

引用来自“达拉达纳达人”的评论

引用来自“许雪里”的评论

你好,分片是以当前执行器注册机器为粒度分片的。分片数为注册在线的执行器数量。 分片参数可以在调度中心任务日志备注里查看,会对任务触发是的环境参数做镜像备份,方便排查问题。

执行器的注册在线数量是2,但是调度日志中的执行日志显示还是1。

麻烦给看下是什么原因?

 

2018-05-08 18:59:20 [com.xxl.job.core.thread.JobThread#run]--[Thread-13] 
----------- xxl-job job execute start -----------
----------- Param:1,2,3
2018-05-08 18:59:20 [com.xxl.job.executor.service.jobhandler.ShardingJobHandler#execute]--[Thread-13] 分片参数:当前分片序号 = 0, 总分片数 = 1
2018-05-08 18:59:20 [com.xxl.job.executor.service.jobhandler.ShardingJobHandler#execute]--[Thread-13] 任务参数1,2,3
2018-05-08 18:59:20 [com.xxl.job.executor.service.jobhandler.ShardingJobHandler#execute]--[Thread-13] 第 0 片, 命中分片开始处理
2018-05-08 18:59:20 [com.xxl.job.core.thread.JobThread#run]--[Thread-13] 
----------- xxl-job job execute end(finish) -----------
----------- ReturnT:ReturnT [code=200, msg=null, content=null]

[Load Log Finish]

也看了代码,分片参数都是由XxlJobTrigger类中的以下两行设置,好像就一直都是0和1。不知道是不是我代码追溯的有问题?

triggerParam.setBroadcastIndex(0);
triggerParam.setBroadcastTotal(1);

引用来自“许雪里”的评论

你好,你的问题大概确认了。分片任务的路由策略需要设置为 “分片广播”。而从上图看你的路由策略选择的 “LFU最不经常使用”。可以参考下文档中路由策略章节。

明白了,非常感谢!

虽然看了两遍了,自己还是看得不够细致。

看代码发现策略包中并没有包含广播分片,只有其他9个策略。请问广播分片的类是哪个?

个人认为广播分片在分类上跟其他9个策略还是有所不同,其他策略应该是针对单个任务串行计算的场景,而广播分片是针对单个任务并行运算的场景。

还有一个小的建议:能否在文档补充下各种策略实际应用的业务场景?

sruby
sruby
该评论暂时无法显示,详情咨询 QQ 群:912889742
许雪里
许雪里
你好,可以升级到最新release版本。新建任务时路由可选项里有的。 分片广播与路由拆分的问题,这个会考虑的。 各策略的场景介绍,这个有必要,后续会完善的。
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部