A Kafka Connect Sink Connector that delivers data from Apache Kafka topics into Firebolt tables.
- Apache Kafka Connect 3.2 or later
- Java 11 or later
- Firebolt account with a service account (client ID and secret)
Download the latest release artifacts from GitHub Releases.
Each release includes:
| Artifact | Description |
|---|---|
firebolt-kafka-connector-<version>.jar |
Uber JAR with all dependencies |
firebolt-db-firebolt-kafka-connect-<version>.zip |
Confluent Hub archive (for confluent-hub CLI) |
firebolt-kafka-connector-<version>-sources.jar |
Source code |
- Download
firebolt-kafka-connector-<version>.jarfrom Releases. - Copy the JAR into your Kafka Connect plugin directory:
mkdir -p /path/to/kafka-connect/plugins/firebolt-kafka-connector cp firebolt-kafka-connector-*.jar /path/to/kafka-connect/plugins/firebolt-kafka-connector/ - Ensure
plugin.pathin your Kafka Connect worker configuration includes the plugins directory:plugin.path=/path/to/kafka-connect/plugins - Restart Kafka Connect workers.
- Download
firebolt-db-firebolt-kafka-connect-<version>.zipfrom Releases. - Install using the Confluent Hub CLI:
confluent-hub install --no-prompt firebolt-db-firebolt-kafka-connect-<version>.zip
- Restart Kafka Connect workers.
Mount the uber JAR into your Kafka Connect container's plugin directory:
services:
kafka-connect:
image: confluentinc/cp-kafka-connect:latest
volumes:
- ./firebolt-kafka-connector-<version>.jar:/usr/share/java/firebolt-kafka-connector/firebolt-kafka-connector.jar
environment:
CONNECT_PLUGIN_PATH: /usr/share/javaThe connector is available as a verified plugin on Confluent Hub. See the Firebolt documentation for Confluent Cloud setup instructions.
Create a connector using the Kafka Connect REST API:
curl -X POST http://localhost:8083/connectors \
-H "Content-Type: application/json" \
-d '{
"name": "firebolt-sink",
"config": {
"connector.class": "com.firebolt.kafka.connect.FireboltSinkConnector",
"tasks.max": "1",
"topics": "my-topic",
"topic.to.table.mapping": "my-topic:my_table",
"jdbc.connection.url": "jdbc:firebolt:my_database?engine=my_engine&account=my_account",
"firebolt.clientId": "<your-service-account-client-id>",
"firebolt.clientSecret": "<your-service-account-client-secret>",
"key.converter": "org.apache.kafka.connect.storage.StringConverter",
"value.converter": "org.apache.kafka.connect.json.JsonConverter",
"value.converter.schemas.enable": "false"
}
}'| Property | Required | Default | Description |
|---|---|---|---|
connector.class |
Yes | Must be com.firebolt.kafka.connect.FireboltSinkConnector |
|
topics |
Yes | Comma-separated list of Kafka topics to consume | |
jdbc.connection.url |
Yes | Firebolt JDBC URL (e.g., jdbc:firebolt:my_db?engine=my_engine&account=my_account) |
|
firebolt.clientId |
Yes | Firebolt service account client ID | |
firebolt.clientSecret |
Yes | Firebolt service account client secret | |
topic.to.table.mapping |
Yes | Comma-separated mapping of topics to Firebolt tables (e.g., topic1:table1,topic2:table2) |
|
tasks.max |
No | 1 |
Maximum number of tasks |
ingestion.type |
No | sql |
Ingestion mode: sql (INSERT via SQL) or binary (Parquet upload) |
exactlyOnce |
No | false |
Enable exactly-once delivery semantics |
errors.tolerance |
No | none |
Error tolerance: none (fail on error) or all (skip and report to DLQ) |
post.processing.script |
No | Optional post-processing SQL to run after each batch (JSON format) |
- Java 11 or higher
./gradlew build./gradlew test./gradlew buildConfluentHubArchiveThe archive will be at build/confluent/firebolt-db-firebolt-kafka-connect-<version>.zip.
Apache License 2.0 -- see LICENSE for details.