ETL Pipelines integration is available for the Scale plan.

Events can be published directly to a supported message queue source of your ETL pipelines. This means you need not provision Internet reachable, unauthenticated HTTPS endpoints in order to ingest Vital events as webhooks.

Destinations

The following destinations are supported:

NameAuthenticationPublication Order
RabbitMQPasswordDepends on your RabbitMQ broker configuration.
Google Cloud Pub/SubIAMPub/Sub Message Ordering is supported.

For evaluation and zero downtime transition, Vital supports double writing both to your Svix webhook endpoints, and to the message queue source of your ETL pipelines.

Event Schema

Vital ETL Pipelines integration publishes all events in the exact same JSON schema as our default Svix webhook offering. Check out our Event Catalog.

Google Cloud Pub/Sub

Message Structure

Each message would be published by Vital message queue with the following attributes:

TypeKeyValue
Attributeevent_typeVital event type, e.g., daily.data.activity.created
Attributeblob_typejson : UTF8 JSON document
Attributeblob_codecgzip: The blob is compressed by gzip. null or absent: The blob is uncompressed.
Data-Encoded JSON blob. This may or may not be compressed — see blob_codec.
Ordering Key-Vital User ID (If you have enabled Message Ordering)
Payload smaller than 1KiB would not be compressed.

At this time, Vital message queue publishes exclusively JSON blobs (blob_type == json).

Having said that, you are strongly encouraged to check for and drop any messages with unrecognized blob_type and blob_codec.

Pub/Sub message ordering

If you wish to receive message for each Vital user in their publication order, Vital message queue supports Pub/Sub Message Ordering, and uses the Vital User ID as the message ordering key.

Vital message queue publishes all messages through the us-central1 and europe-west1 PubSub regional endpoints.

Pub/Sub Exactly Once Delivery is discouraged to be used together with Message Ordering. Our own trial suggested that the combination would struggle to move high volume of messages.

IAM Permission

Grant the relevant IAM Principals on your topic with these pre-defined roles:

  • Pub/Sub Publisher (roles/pubsub.publisher)
  • Pub/Sub Viewer (roles/pubsub.viewer)

Or more specifically these permissions if you wish to create a custom IAM role with a minimized grant:

  • pubsub.topics.get
  • pubsub.topics.publish
EnvironmentRegionService Account
SandboxUScustomer-topics-us@vital-sandbox.iam.gserviceaccount.com
SandboxEuropecustomer-topics-eu@vital-sandbox.iam.gserviceaccount.com
ProductionUScustomer-topics-us@vital-prod-307415.iam.gserviceaccount.com
ProductionEuropecustomer-topics-eu@vital-prod-307415.iam.gserviceaccount.com

Information needed by Vital

When you have completed the setup, please provide Vital the following information:

  • Your Google Cloud Project ID
  • Your Cloud Pub/Sub Topic name
  • Whether or not you want messages to be published under Pub/Sub Message Ordering
  • Whether or not you want larger blobs (≥ 1KiB) to be gzipped

RabbitMQ

Message Structure

Each message would be published by Vital message queue with the following attributes:

KeyValue
Routing KeyVital event type, e.g., daily.data.activity.created
Content-Typeapplication/json : UTF8 JSON document
Content-Encodinggzip: The blob is compressed by gzip. null/absent: The blob is uncompressed.
DataEncoded JSON blob. This may or may not be compressed — see blob_codec.
Payload smaller than 1KiB would not be compressed.

At this time, Vital message queue publishes exclusively JSON blobs (blob_type == json).

Having said that, you are strongly encouraged to check for and drop any messages with unrecognized Content-Type and Content-Encoding.

Exchange requirements

Vital message queue only supports password authentication at this time.

Vital message queue publishes messages with the following settings:

  • Publisher Confirm mode is required
  • Messages are published with the Mandatory flag but without the Immediate flag.
  • Messages are published with Event Type as the Routing Key.

Please get in touch if these need to be configured differently for your RabbitMQ exchange.

Information needed by Vital

When you have completed the setup, please provide Vital the following information:

  • An ampqs:// connection string with username and password embedded
  • Whether or not you want larger blobs (≥ 1KiB) to be gzipped.