乐趣区

关于java:DataX-Channel数量是怎么确定的

DataXML 的 channel 数量,由 bps 限速、tps 限速、间接设置三种形式。计算的步骤在 split 中,影响到 jobReader 和 jobWriter 的认为切分。

bps 限速

总 bps 限速通过 job.setting.speed.byte 设置,在 job.json 中。

单个 channel 的 bps 值通过 core.transport.channel.speed.byte 设置,在 core.json 中,默认为 -1。

如果设置了总 bps 限速,那单个 channel 的 bps 值不能为空,也不能为非负数。

channel 的数量 = 总 bps 限速 / 单个 channel 的 bps 值。

比方总 bps 限速为 100,单个 channel 的 bps 为 10,那 channel 的数量就是 100/10=10 个。

tps 限速

总 tps 限速通过 job.setting.speed.record 设置,在 job.json 中。

单个 channel 的 tps 值通过 core.transport.channel.speed.record 设置,在 core.json 中,默认为 -1。

如果设置了总 tps 限速,那单个 channel 的 tps 值不能为空,也不能为非负数。

channel 的数量 = 总 tps 限速 / 单个 channel 的 tps 值。

比方总 tps 限速为 200,单个 channel 的 tps 为 40,那 channel 的数量就是 200/40= 5 个。

间接设置

通过 job.setting.speed.channel 间接设置。

比方这个值设置为 5,那 channel 的数量就是 5 个。

优先级

如果以上三个都设置了,那以哪个为主呢?

如果 bps 限速和 tps 限速没有设置,那 channel 的数量默认都是 Integer.MAX_VALUE。

如果 bps 限速和 tps 限速都设置了,那谁比拟小,以哪个为主。

比方下面的例子,tps 的 channel 个数 5 小于 bps 的 channel 个数 10,那 channel 的个数最终为 5。

如果 bps 限速和 tps 限速只设置了一个,那以设置的那个为准,因为没设置的那个默认 Integer.MAX_VALUE,必定大于设置的那个,所以取小的数就是设置的那个。

如果 bps 限速和 tps 限速都没有设置,那才读取间接设置的值,也就是说,间接设置的优先级最低。

如果都没有设置,那间接抛异样,也就是说,必须设置 Job 运行速度。

taskNumber

channel 数量,除了通过下面计算的后果外,还须要再和 taskNumber 进行比照,取最小值。

比方 taskNumber 的值是 2,下面最初的后果是 5,那 channel 的数量就是会重置为 2,这个步骤是在任务调度之前做的。

退出移动版