A method for processing a batch of input data in a fault tolerant manner, the method including: reading a batch of input data including a plurality of records from one or more data sources (310, 312, 410, 412); and passing the batch through a dataflow graph (300, 400) including two or more nodes representing components connected by links representing flows of data between the components, wherein at least one but fewer than all of the components (331, 332, 333, 431, 432, 433) includes a checkpoint process for an action performed for each of multiple units of work associated with one or more of the records, wherein the component (331, 332, 333, 431, 432, 433) that includes the checkpoint process runs on a plurality of processing devices in parallel, and wherein the checkpoint process includes: opening a checkpoint buffer stored in non-volatile memory at the start of processing for the batch; for each unit of work from the batch, if a result from performing the action for the unit of work was previously saved in the checkpoint buffer, using the saved result to complete processing of the unit of work without performing the action again, or if a result from performing the action for the unit of work is not saved in the checkpoint buffer, performing the action to complete processing of the unit of work and saving the result from performing the action in the checkpoint buffer, and wherein the allocation of data records among the plurality of parallel processing devices is consistent between different processing runs of the batch and each processing device maintains an independent checkpoint buffer. reading a batch of input data including a plurality of records from one or more data sources (310, 312, 410, 412); and passing the batch through a dataflow graph (300, 400) including two or more nodes representing components connected by links representing flows of data between the components, wherein at least one but fewer than all of the components (331, 332, 333, 431, 432, 433) includes a checkpoint process for an action performed for each of multiple units of work associated with one or more of the records, wherein the component (331, 332, 333, 431, 432, 433) that includes the checkpoint process runs on a plurality of processing devices in parallel, and wherein the checkpoint process includes: opening a checkpoint buffer stored in non-volatile memory at the start of processing for the batch; for each unit of work from the batch, if a result from performing the action for the unit of work was previously saved in the checkpoint buffer, using the saved result to complete processing of the unit of work without performing the action again, or if a result from performing the action for the unit of work is not saved in the checkpoint buffer, performing the action to complete processing of the unit of work and saving the result from performing the action in the checkpoint buffer, and wherein the allocation of data records among the plurality of parallel processing devices is consistent between different processing runs of the batch and each processing device maintains an independent checkpoint buffer. opening a checkpoint buffer stored in non-volatile memory at the start of processing for the batch; for each unit of work from the batch, if a result from performing the action for the unit of work was previously saved in the checkpoint buffer, using the saved result to complete processing of the unit of work without performing the action again, or if a result from performing the action for the unit of work is not saved in the checkpoint buffer, performing the action to complete processing of the unit of work and saving the result from performing the action in the checkpoint buffer, and wherein the allocation of data records among the plurality of parallel processing devices is consistent between different processing runs of the batch and each processing device maintains an independent checkpoint buffer.