Persistent storage for a stream

I am looking into using NATS as a kind of sensor data ingestion hub, where all sensor data gets sent directly to NATS jetstream, and then refined and further processed into other streams. We want to persist all the incoming messages in cold storage (typically parquet files/delta tables) for backup and batch analysis.

This process can happen 'slowly' and in batches, but it is quite important that we manage to persist them all, while at the same time being performant.

I have looked a bit around for this, but to my surprise I don't find any existing solution to this, which makes me a bit suspicious that maybe I am missing something obvious.

How is this usually handled? Does everyone just roll their own (using interest based retention and durable consumers maybe)? The latter does not seem very hard, I would prefer a battle tested solution which had already ironed out the bugs;-)