The title of this question is just my hypothesis and I would like you to ask about it.
I have dataflow pipeline (Python) which does something like this:
- Put file in GCS bucket.
- GCS bucket sends notification to PubSub topic.
- PubSub topic triggers Dataflow streaming pipeline.
- Some DoFn transformations.
- Write to BigQuery.
I discovered that one file that had been processing didn't land in BQ table. No errors, all logs showed that all is fine and we came to the final step - write to BQ. After several seconds the same file started to be processed again, from the beginning.
Have you seen this mechanism in your pipelines? I have two theories:
- GCS send's duplicated notifications and that's why process for one file was triggered twice. This makes sense, also this is described in google documentation but this not explains why first pipeline run didn't succeed (I could not find this file in BQ target table).
- WriteToBiqQuery step failed (silently) and dataflow/apache beam decided to reprocess the file from the beginning. That would make sense but I can't find any prove that this mechanism is a real thing.
Any thoughts?