Skip to main content
The Debezium connector for PlanetScale is based on the Debezium Vitess connector and packages the PlanetScale-specific connector classes, patches, and runtime dependencies for Kafka Connect and Debezium Server. It streams change events from a PlanetScale Vitess database through VStream, including the initial copy of existing rows. This page covers which connector release to pick, how to connect it to PlanetScale, the deployment options we test, and what each release is verified against.
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 like v<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 the debezium.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.shard unset.
  • 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.
Mount 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 into lib/ and your configuration into config/application.properties, then start it with run.sh. Requires Java 21.
The repository’s 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’s plugin.path, restart the worker, and register the connector:
Both the connector and its task should report 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 the com.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: BIT columns, TIMESTAMP/DATETIME precision modes and zero dates, unsigned BIGINT handling, 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.
Release validation against a live PlanetScale database, using the downloaded release files (checksums verified against SHA256SUMS.txt):
  • Debezium Server on the official quay.io/debezium/server image of the same line, with the connector jar in lib/.
  • 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.
Each run captures a fixed set of tables and checks that the initial copy and the following inserts, updates and deletes all arrive at the sink with the expected content: a plain table, a table of TIMESTAMP/DATETIME columns including zero-date values, and a table of BIT columns.

Known limitations

  • Zero dates: a 0000-00-00 00:00:00 value is emitted as null, with a warning in the log. This follows Debezium’s handling of invalid dates.
  • bigint.unsigned.handling.mode: the Vitess connector supports precise and long only. If your configuration sets string, the connector logs a warning and falls back to precise.
  • 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 from io.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 (name in Kafka Connect, debezium.source.name in Debezium Server) and the same topic.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.filename in Debezium Server, or the same offsets topic in Kafka Connect.
  • Change connector.class to the new class name.
Columns of type 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.

Need help?

Get help from the PlanetScale Support team, or join our Discord community to see how others are using PlanetScale.