Hi Bin,
I would put Flink applications into separate repos. It reduces compile times and makes automatic deployment much easier (if you update master/release branch of application X, you simply deploy it - potentially with some manual trigger in your CI/CD pipeline) . You can also easily bump Flink versions for applications that benefit from new features.
If you have a large amount of shared code between your Flink applications and they have similar life cycles (e.g. a kind of strongly coupled), then it makes sense to put these specific applications into the same repo. A smaller amount of shared code should reside in its own repo.
Naturally, if you have one code base for several Flink applications (e.g. generic application that is configured), then you have only one repo. For example, you have a generic engine to execute some SQL query on any dataset and only need a bit of yaml to configure it, you would have one application with X deployments. Usually, upon updating the generic application, you want to refresh all deployments.
TL;DR only put in things into the same repo, if they share the life-cycle to keep deployment simple.
I hope this helps,
Arvid
Hi community
I am curious about people's experience in structuring Flink applications. Do you use a mono repo structure (multiple applications in one single repo) or broken down each application into its own repo?
If possible, can you share some of your thoughts on the pros/cons of each approach?
Thanks
Bin