我们在Grails应用程序之上使用Spring Batch v2.1.9来每天处理100k个事务。此批处理作业的一个步骤必须从MongoDB读取这些事务,通过进行几个REST调用并更改状态来处理它们,最后将它们保存回MongoDB。这一特定步骤是使用本地分区器来尝试提高执行速度,现在在网格大小上使用100个线程。问题是,有时几个从属步骤卡住而不会继续,并使作业处于甚至无法重新启动的状态。 我的主步和从步配置是这样的:
batch.step(id: 'rulesMaster', next: 'filesBuilder') {
batch.partition(step: 'jerseyRulesSlave', partitioner: 'rangePartitioner') {
batch.handler('grid-size': 100, 'task-executor': 'taskExecutor')
}
batch.listeners {
batch.listener(ref: "rulesStepConfigsLoaderListener")
}
}
taskExecutor(SimpleAsyncTaskExecutor)
batch.step(id: 'rulesSlave') {
batch.tasklet {
batch.chunk(
reader: 'transactionItemReader',
processor: 'transactionProcessor',
writer: 'transactionWriter',
'commit-interval': 200
)
}
}
我们使用MySQL运行Spring Batch,在BATCH_STEP_EXECUTION上我们在COMPLETED状态下有这样的行:
STEP_EXECUTION_ID=10592,
VERSION='5',
STEP_NAME='rulesSlave:partition88',
JOB_EXECUTION_ID='2045',
START_TIME='2016-09-30 02:08:19',
END_TIME='2016-09-30 02:48:38',
STATUS='COMPLETED',
COMMIT_COUNT='3',
READ_COUNT= '582',
FILTER_COUNT='0',
WRITE_COUNT='582',
READ_SKIP_COUNT='0',
WRITE_SKIP_COUNT='0',
PROCESS_SKIP_COUNT='0',
ROLLBACK_COUNT='0',
EXIT_CODE='COMPLETED',
EXIT_MESSAGE='',
LAST_UPDATED='2016-09-30 02:48:38'
和EXECUTING状态一样:
STEP_EXECUTION_ID='10593',
VERSION='1',
STEP_NAME='rulesSlave:partition89',
JOB_EXECUTION_ID='2045',
START_TIME='2016-09-30 02:08:20',
END_TIME=NULL,
STATUS='STARTED',
COMMIT_COUNT='0',
READ_COUNT='0',
FILTER_COUNT='0',
WRITE_COUNT='0',
READ_SKIP_COUNT='0',
WRITE_SKIP_COUNT='0',
PROCESS_SKIP_COUNT='0',
ROLLBACK_COUNT='0',
EXIT_CODE='EXECUTING',
EXIT_MESSAGE='',
LAST_UPDATED='2016-09-30 02:08:20'
我们有几个问题:
在此先感谢,任何帮助将不胜感激!