New to Kestra?
Use blueprints to kickstart your first workflows.
Ingest Kafka topics and schemas into DataHub with Kestra. A scheduled recipe reads the schema registry so streaming datasets stay cataloged, with Slack alerts.
Streaming data is the least discoverable data in most companies: topics are named by convention, schemas live in a registry nobody browses, and the only documentation is the producer's source code. This blueprint catalogs the bus. io.kestra.plugin.datahub.Ingestion runs a kafka source recipe that lists topics matching an allow pattern, resolves each topic's Avro or JSON schema from the schema registry, and publishes both to DataHub through the datahub-rest sink. It also demonstrates the task's env property: secrets become environment variables that the recipe references with ${VAR} expansion, keeping the recipe body free of any inline credential expression.
ingest_kafka_metadata (io.kestra.plugin.datahub.Ingestion) receives DATAHUB_GMS_URL and DATAHUB_TOKEN through its env property, resolved from Kestra secrets at runtime.${DATAHUB_GMS_URL} and ${DATAHUB_TOKEN}, which the DataHub CLI expands inside the container. This is the pattern to use when you want recipes portable between Kestra and manual datahub ingest runs.kafka source connects to the brokers from the bootstrap_servers input, lists topics matching the topic_allow_pattern regex, and pulls schemas from the registry URL held in a secret.datahub-rest sink publishes each topic as a dataset with its schema fields.notify reports every sync to Slack, the errors block alerts on failure, and a disabled-by-default Schedule trigger reruns the sync every six hours.env plus ${VAR} expansion pattern, so recipe files stay credential-free and portable.Topic metadata changes with every deploy that adds an event type or evolves a schema, so cataloging it is a recurring job, not a one-off script. Kestra runs the unchanged DataHub recipe on a schedule, injects broker and registry credentials from secrets, retries transient broker or GMS failures, and alerts the channel that owns the bus when a sync fails. The execution history doubles as an audit log of when the catalog last matched the cluster.
acryldata/datahub-ingestion container image.DATAHUB_GMS_URL: URL of the DataHub GMS server.DATAHUB_TOKEN: DataHub personal access token with permission to ingest metadata.SCHEMA_REGISTRY_URL: URL of the schema registry, including credentials if it requires them.SLACK_WEBHOOK_URL: Slack incoming webhook URL.bootstrap_servers and topic_allow_pattern for your cluster and execute the flow.disabled: false on the every_six_hours trigger.consumer_config under connection for SASL or TLS clusters, keeping passwords in secrets passed through env.deny list under topic_patterns to exclude specific noisy topics from an otherwise broad allow pattern.