A computer implemented method of processing data blocks in a data analytics system, comprising: storing a plurality of sequential data blocks in a block cache, each data block containing one or more data records, each data record containing one or more values and a record marker marking the end of the data record; allocating a data block in the block cache to a worker thread, the one or more data records (635, 645, 655) of the data block including at least a part of a first data record; parsing, by the worker thread, the data block to identify the one or more data records (635, 645, 655) contained within the data block, the parsing comprising: scanning, by the worker thread, the data block to identify an estimated first record marker location estimated to mark an end of the first data record, storing the estimated first record marker location in a parsing state cache object corresponding to the data block, and parsing data records of the data block located after the estimated first record marker through the end of the block, the parsing comprising parsing part of a data record through the end of the data block; requesting a next sequential data block after the data block, the next sequential data block containing one or more data records ( 665, 675) and a part of the data record partially contained in the next sequential data block;; parsing, by the worker thread, the next sequential data block from a beginning of the next sequential data block until the worker thread reaches a record marker indicating an end of the data record; storing the record marker indicating an end of the data record as a true record marker location in a parsing state cache object corresponding to the next sequential block; determining, by the worker thread, whether the next sequential data block was correctly parsed by determining whether an estimated first record marker location recorded in the parsing state cache object corresponding to the next sequential block by a different worker thread matches the true record marker location; and providing the one or more parsed data records contained within the next sequential data block to a data analytics workflow executing on the data analytics system responsive to determining that the next sequential data block was correctly parsed. storing a plurality of sequential data blocks in a block cache, each data block containing one or more data records, each data record containing one or more values and a record marker marking the end of the data record; allocating a data block in the block cache to a worker thread, the one or more data records (635, 645, 655) of the data block including at least a part of a first data record; parsing, by the worker thread, the data block to identify the one or more data records (635, 645, 655) contained within the data block, the parsing comprising: scanning, by the worker thread, the data block to identify an estimated first record marker location estimated to mark an end of the first data record, storing the estimated first record marker location in a parsing state cache object corresponding to the data block, and parsing data records of the data block located after the estimated first record marker through the end of the block, the parsing comprising parsing part of a data record through the end of the data block; scanning, by the worker thread, the data block to identify an estimated first record marker location estimated to mark an end of the first data record, storing the estimated first record marker location in a parsing state cache object corresponding to the data block, and parsing data records of the data block located after the estimated first record marker through the end of the block, the parsing comprising parsing part of a data record through the end of the data block; requesting a next sequential data block after the data block, the next sequential data block containing one or more data records ( 665, 675) and a part of the data record partially contained in the next sequential data block;; parsing, by the worker thread, the next sequential data block from a beginning of the next sequential data block until the worker thread reaches a record marker indicating an end of the data record; storing the record marker indicating an end of the data record as a true record marker location in a parsing state cache object corresponding to the next sequential block; determining, by the worker thread, whether the next sequential data block was correctly parsed by determining whether an estimated first record marker location recorded in the parsing state cache object corresponding to the next sequential block by a different worker thread matches the true record marker location; and providing the one or more parsed data records contained within the next sequential data block to a data analytics workflow executing on the data analytics system responsive to determining that the next sequential data block was correctly parsed.