Overview
Apache Kafka and Redpanda are interchangeable from Wirekite’s perspective: both speak the Kafka wire protocol, and Wirekite uses the same driver and the same code path for both. The only customer-visible difference is the type label on the queue target (kafka vs
redpanda) — pick whichever matches the system you’re actually
operating, since that label flows through to the UX list and metrics
attribution.
For cross-vendor concepts (message format, ordering, retries, charts),
see Queues Overview.
Prerequisites
Broker cluster
You need a reachable broker cluster — Wirekite does not bundle or manage one. The cluster must:- Speak Kafka protocol (Kafka, Redpanda, or any compatible implementation).
- Accept plaintext connections from the Wirekite extractor host. SASL and TLS are not yet supported by the Wirekite client; terminate them in front of the broker if your environment requires them.
- Allow auto-topic-creation OR have the topic pre-created (see below).
Topic
Wirekite uses one topic per queue target — every change record from every table in the migration lands on the same topic. Pick a name that attributes the stream to the migration, e.g.<env>-wirekite-<source>-to-<target>.
auto.create.topics.enable=true on the broker, Wirekite’s first
publish will create the topic implicitly. The connection test (see
below) explicitly avoids auto-create so a missing topic surfaces as an
error rather than an unintended side effect.
Wirekite configuration
Queue-target definition
Create the queue target through the UX wizard or the API. The field set:
The same fields, with the same names, are exposed through the API.
Extractor config keys
When wiring the extractor directly (e.g. forqa/fulltest or scripted
runs), the orchestrator emits these keys into the change-extractor
config:
queueType=redpanda is accepted as a synonym — the dispatch is identical.
Compression
Compression is applied at the Kafka producer (per-message wire format), not at the application layer. The codec choice is a CPU-vs-bandwidth trade-off:
For a CDC stream of newline-delimited row data,
zstd typically halves
broker storage at a small CPU cost on the extractor side.
Authentication
Connection testing
The UX wizard exposes a Test Message button that runs a Metadata request against the configured brokers with auto-create disabled. A successful test confirms:- The first broker in the list is reachable on the configured port.
- The cluster responds to a metadata request within a 10-second timeout.
- The named topic exists.
The same probe runs at extractor startup; a queue target that passes
the wizard test will also pass the startup gate, barring intervening
broker state changes.
Failure semantics
The Wirekite Kafka publisher is fail-fast: any publish error fromkafka-go.WriteMessages (after the SDK’s MaxAttempts=10 budget is
spent) increments the errors counter, logs QUEUE: flush failed,
and exits the extractor. The orchestrator flips the migration to
Replication Failed; recovery is through Resume from Failed,
which replays from the last commit boundary persisted to the
progress DB.
On the SQL Server C extractor, the librdkafka driver runs with
message.timeout.ms=300000 (5 minutes). Any message that cannot be
durably acknowledged within that window triggers the same fail-fast
path through the delivery-report callback.
This means a transient broker outage shorter than the SDK’s retry
budget is invisible to Wirekite — the SDK retries internally. A
sustained outage causes a clean failure plus replay-on-recovery.
Operations
The reference consumer for end-to-end verification is atqa/queue_reader/queue_reader in the Wirekite source tree:
OP\tschema\ttable\t... prefix into per-table .ckt files in
<demux-dir>, and prints final counters that should match the
extractor’s submitted / delivered. This is the same utility used
by qa/fulltest to validate end-to-end correctness.
For Pub/Sub-specific setup, see Google Pub/Sub.