针对几个参数的配置,之前根据阅读源码做了一些解读,这里做一下总结.
core.json
1-core.container.taskGroup.channel
1.1 将拆分成的Task重新组合后 组装成的TaskGroup(任务组),默认启动的线程数量去执行这些Task
1.2 和job配置中的channel配合使用,可以提高taskGroup的并发个数(前提是没有配置byte和record)
每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。
2-core.transport.channel.speed.byte
2.1 首先作为单个channel的byte大小限速参数
2.2 和job中配置的job.setting.speed.byte配合使用,可以提高taskGroup的并发个数
3-core.transport.channel.speed.record
3.1 首先作为单个channel的record数量限速参数
3.2 和job中配置的job.setting.speed.record配合使用,可以提高taskGroup的并发个数
job.json
1-job.setting.speed.channel
1.1 job.setting.speed.channel/core.container.taskGroup.channel 获取taskGroup并发的个数
2-job.setting.speed.byte
1.1 job.setting.speed.byte/core.transport.channel.speed.byte)/core.container.taskGroup.channel 获取taskGroup并发的个数
3-job.setting.speed.record
1.1job.setting.speed.record/core.transport.channel.speed.record)/core.container.taskGroup.channel 获取taskGroup并发的个数
实例:
全局限速:
job.setting.speed.byte 1000 可以理解为整个任务所有任务的速度总和
core.transport.channel.speed.byte 100 单个channel限速
core.container.taskGroup.channel 5
此时如果切分后task的个数大于通过byte计算出的needChannelNumber,
可以获取到taskGroup的个数为10/5=2
每个taskGroup提交到固定大小为2的线程池执行任务,并且执行任务的并发数是5
主要阅读的代码路径:
com.alibaba.datax.core.job.JobContainer com.alibaba.datax.core.transport.channel.Channel com.alibaba.datax.core.taskgroup.TaskGroupContainer
限速的逻辑: * 1- 获取到core.transport.channel.speed.byte和core.transport.channel.speed.record两个配置的参数值 * 2-判断是否大于0,如果两个都没有配置,则直接返回 * 3-根据byte计算出当前的速度,和配置的byte做比较,计算出需要休眠的时间 * 4-根据record计算出当前的速度,和配置的record做比较,计算出需要休眠的时间 * 5-获取休眠时间较大的值进行sleep.
调整channelNumber的逻辑在之前的文章已经总结可以去查看。
后续发现问题,会更新文章。
共同学习,写下你的评论
评论加载中...
作者其他优质文章