Looking for the 2.x connector? See Debezium connector for PlanetScale (archived).
Pick a release
We publish one connector release line per upstream Debezium minor version, so you can match the Debezium version already running in your environment. Each line tracks the latest upstream patch release of that minor. Release tags look likev<debezium version>-r<N>, where r<N> counts PlanetScale releases on top of the same upstream version.
If you have no existing Debezium deployment, start with the 3.6 line, the newest one available.
Download the connector
Every release on the releases page ships the same set of files:
Verify what you downloaded before deploying it:
Connection settings
These settings are the same for every deployment option. In Kafka Connect and Confluent they are plain connector properties; in Debezium Server they carry thedebezium.source. prefix.
Notes:
- The connector talks to PlanetScale over gRPC on port 443 with TLS. Outbound access to your connection-string hostname on port 443 is all it needs.
- On a sharded PlanetScale database the connector streams all shards; leave
vitess.shardunset. - Keep
tasks.max=1. The Vitess connector runs a single task per keyspace.
Deploy
We test every release in the deployment options below.Debezium Server with the official image
The quickest way to run the connector standalone. Mount the connector jar into the official Debezium Server image for the matching line and mount your configuration.data/ to persist offsets and schema history across restarts. Existing rows arrive as events first (the snapshot), followed by changes as they happen.
Debezium Server on a VM or your laptop
Download the Debezium Server distribution for the same line from Maven Central, unpack it, copy the connector jar intolib/ and your configuration into config/application.properties, then start it with run.sh. Requires Java 21.
server/ helper (make -C server run) automates these steps for a local build.
Self-hosted Kafka Connect
Unzip the plugin archive into a directory on the worker’splugin.path, restart the worker, and register the connector:
RUNNING, and topics named <topic.prefix>.<database>.<table> appear as events arrive.
Confluent Cloud custom connector
Upload the plugin archive as a custom connector plugin, then create a connector from it through the Confluent wizard: pick thecom.planetscale.debezium.PlanetscaleConnector class, fill in the PlanetScale connection settings (port 443, Shard left empty), and allow-list <your PlanetScale hostname>:443 as a connection endpoint. The full walkthrough with screenshots is on its own page.
Debezium connector on Confluent Cloud
What each release is tested against
Build-time tests (run in CI on every change):- Value conversion for the Vitess types that differ from MySQL defaults:
BITcolumns,TIMESTAMP/DATETIMEprecision modes and zero dates, unsignedBIGINThandling, and spatial (GEOMETRY) columns. - Connection handling: TLS to PlanetScale, mutual TLS, and the gRPC authentication interceptor that carries the PlanetScale credentials.
- Connector configuration validation and start-up, embedded-engine start-up, and the Kafka Connect plugin service registration.
- An integration test against a Vitess cluster in a container that exercises VStream end to end.
SHA256SUMS.txt):
- Debezium Server on the official
quay.io/debezium/serverimage of the same line, with the connector jar inlib/. - Debezium Server distribution (the Maven Central tarball) on a plain JVM, the way a VM or laptop deployment runs it.
- Self-hosted Kafka Connect with the plugin archive, connector and task reaching
RUNNING. - Confluent Cloud as a custom connector, uploaded from the plugin archive.
TIMESTAMP/DATETIME columns including zero-date values, and a table of BIT columns.
Known limitations
- Zero dates: a
0000-00-00 00:00:00value is emitted asnull, with a warning in the log. This follows Debezium’s handling of invalid dates. bigint.unsigned.handling.mode: the Vitess connector supportspreciseandlongonly. If your configuration setsstring, the connector logs a warning and falls back toprecise.- Topic naming: events for a table go to
<topic.prefix>.<database>.<table>. Vitess shard names are not part of the topic name.
Upgrading from the 2.x connector
The 2.x connector (archived) was a fork of the Debezium 2.4 Vitess connector shipped as a single jar with dependencies. The 3.x lines are a different artifact: the connector class name changes fromio.debezium.connector.planetscale.PlanetScaleConnector to com.planetscale.debezium.PlanetscaleConnector, the Kafka Connect plugin is a zip archive, and the Debezium Server jar must match the server’s Debezium line.
Offsets carry over. The 3.x connector reads the offsets written by the 2.x connector (same partition key and the same vgtid offset entry), skips the snapshot, and resumes the VStream from the last recorded VGTID. We verify this for both runtimes: the archived connector on Debezium Server 2.4.1 followed by the 3.6 line on the same offsets file, and the archived connector on a Kafka Connect worker followed by the 3.6 line registered under the same connector name against the same offsets topic. In both cases no rows are re-sent and streaming continues from the stored position.
To keep the offsets matched after the upgrade:
- Keep the same connector name (
namein Kafka Connect,debezium.source.namein Debezium Server) and the sametopic.prefix. Both are part of the key under which offsets are stored. - Point the new connector at the same offset storage: the same
offset.storage.file.filenamein Debezium Server, or the same offsets topic in Kafka Connect. - Change
connector.classto the new class name.
BIT were not supported by the 2.x connector and were dropped from events with an unknown column type warning. The 3.x lines emit them, so tables with BIT columns gain those fields after the upgrade.

