Conduit
Data Integration for Production Data Stores. :dizzy:
Overview
Conduit is a data streaming tool written in Go. It aims to provide the best user experience for building and running real-time data pipelines. Conduit comes with common connectors, processors and observability data out of the box.
Conduit pipelines are built out of simple building blocks which run in their own goroutines and are connected using Go channels. This makes Conduit pipelines incredibly performant on multi-core machines. Conduit guarantees the order of received records won't change, it also takes care of consistency by propagating acknowledgements to the start of the pipeline only when a record is successfully processed on all destinations.
Conduit connectors are plugins that communicate with Conduit via a gRPC interface. This means that plugins can be written in any language as long as they conform to the required interface.
Conduit was created and open-sourced by Meroxa.
- Quick start
- Installation guide
- Preflight checks
- Configuring Conduit
- Storage
- Connectors
- Processors
- API
- Embed Conduit in your Go app
- Documentation
- Contributing
Quick start
The fastest way to see Conduit working — scaffold and run a demo pipeline with a single command:
conduit quickstart
Sample records flow to your console within seconds. State is in-memory and nothing is written to your working directory; press Ctrl-C to stop. For a full walkthrough, see .
Installation guide
Install script (recommended)
The install script detects your platform and installs Conduit through the native
package manager for it — Homebrew on macOS, dpkg or rpm on Linux:
curl https://conduitdata.io/install.sh | bash
This is the route the documentation site leads with, and on macOS it is the one to prefer: it goes through Homebrew, so it avoids the quarantine problem described under Download binary and run.
Homebrew
Make sure you have homebrew installed on your machine, then run:
brew update
brew install conduit
Download binary and run
Download a pre-built binary from the latest release and run it:
./conduit run
On macOS, the release binaries are ad-hoc signed — they are not Developer ID
signed and they are not notarized. A binary downloaded through a browser
therefore carries the com.apple.quarantine attribute, and Gatekeeper refuses
to run it with no error message at all: the process is killed and you get an
empty terminal. Clear the attribute after downloading and before you run the
binary for the first time:
xattr -d com.apple.quarantine ./conduit
curl and wget do not set the quarantine attribute, so a binary fetched that
way runs as-is. Homebrew and the install script are unaffected — on macOS,
prefer either of those.
Once you see that the service is running, the configured pipeline should start
processing records automatically. You can also interact with
the Conduit API directly, we recommend navigating
to http://localhost:8080/openapi and exploring the HTTP API through Swagger
UI.
Conduit can be configured through command line parameters. To view the full list
of available options, run ./conduit run --help or see
configuring Conduit.
Debian
Download the right .deb file for your machine architecture from the
latest release, then run
the command below, substituting the version and architecture of the file you
downloaded for and:
dpkg -i conduit_<version>_Linux_<arch>.deb
RPM
Download the right .rpm file for your machine architecture from the
latest release, then run
the command below, substituting the version and architecture of the file you
downloaded for and:
rpm -i conduit_<version>_Linux_<arch>.rpm
Build from source
Requirements:
git clone [email protected]:ConduitIO/conduit.git
cd conduit
make
./conduit run
Docker
Our Docker images are hosted on GitHub's Container Registry. To run the latest Conduit version, you should run the following command:
docker run -p 8080:8080 conduit.docker.scarf.sh/conduitio/conduit:latest
Preflight checks
Before running Conduit for the first time (or after changing configuration), run
conduit doctor to check whether your environment is ready:
conduit doctor
It runs a set of offline, non-destructive checks — config resolution and
validation, database reachability, API address availability, plugin
directories, the built-in plugin registry, and whether a running engine is
reachable — and reports pass/warn/fail for each, grouped by category. It does
not start a Runtime; this is distinct from the running server's /readyz and
/healthz endpoints, which answer "is the running engine serving?" instead of
"would conduit run succeed here?".
Useful flags: --json for machine-readable output, --check (repeatable)
to run only specific checks, --deep to additionally verify standalone connector
plugin binaries in an isolated subprocess, --require-server to fail instead of
warn when no Conduit server is reachable, and -q/--quiet to only print
warnings, failures, and the summary. See conduit doctor --help for the full
list of checks and exit codes, and
the design doc for the rationale.
Configuring Conduit
Conduit accepts CLI flags, environment variables and a configuration file to configure its behavior. Each CLI flag has a corresponding environment variable and a corresponding field in the configuration file. Conduit uses the value for each configuration option based on the following priorities:
CLI flags (highest priority) - if a CLI flag is provided it will always be respected, regardless of the environment variable or configuration file. To see a full list of available flags run
conduit run --help.Environment variables (lower priority) - an environment variable is only used if no CLI flag is provided for the same option. Environment variables have the prefix
CONDUITand contain underscores instead of dots and hyphens (e.g. the flag-db.postgres.connection-stringcorresponds toCONDUIT_DB_POSTGRES_CONNECTION_STRING).Configuration file (lowest priority) - By default, Conduit loads a configuration file named
conduit.yamllocated in the same directory as the Conduit binary. You can customize the directory path to this file using the CLI flag--config.path. The configuration file is optional, as any value specified within it can be overridden by an environment variable or a CLI flag.The file must be a YAML document, and keys can be hierarchically structured using
.. For example:db: type: postgres # corresponds to flag -db.type and env variable CONDUIT_DB_TYPE postgres: connection-string: postgres://localhost:5432/conduitdb # -db.postgres.connection-string or CONDUIT_DB_POSTGRES_CONNECTION_STRINGTo generate a configuration file with default values, use:
conduit init --path.
This parsing confi