This will depend on not just your volume but the number of bytes you are sending with each request. You want this to be autoscaling but for something with this volume you are probably fine with a few n1-standard-1s or fewer n1-standard-2s.
Beam Enrich and Big Query loader both run on Dataflow (which uses Compute Engine under the hood) and there is a setting to autoscale workers here. You’ll want to make sure you set a maxWorkers setting here but in general these jobs are quite efficient in terms of number of workers required.
You should run these as two separate Dataflow jobs - each one will have it’s own compute under the hood which Dataflow will manage for you.
To forward failed inserts - most commonly due to table mutations in which an event may have columns that do not exist yet in the destination table.
There’s nothing to stop you running both in parallel if required - particularly if you are doing batch inserts into BigQuery rather than streaming inserts. For streaming inserts from PubSub to BigQuery you don’t really need to persist the events to Cloud Storage - though you can if required.
I only started looking at the 0.2.0 branch because when I try and run the forwarder i get
Exception in thread "main" java.lang.IllegalArgumentException: Pubsub subscription is not in projects/<project_id>/subscriptions/<subscription_name> format: projects/***/topics/***