connectors/kafka registers the kafka source and sink (alpha). The sink
publishes one Kafka record per input row. It supports bounded full_append,
incremental_append, and cdc_append, and continuous append epochs.
Configuration
orders to warehouse.orders. Provision destination
topics before running. The connector disables automatic topic creation and
validates metadata before publishing. Use either topic (one fixed destination)
or topic_prefix, never both. Topic names are validated without sanitization.
Connection settings are shared with the Kafka source:
brokers, client_id, tls_enabled, tls_ca_pem, tls_cert_pem,
tls_key_pem, sasl_mechanism, sasl_username, and secret sasl_password.
PEM values are pasted directly and stored as secrets; no worker filesystem paths
are supported. TLS uses system trust unless a custom CA is supplied. The SASL
authentication dropdown shows username/password inputs only for PLAIN or SCRAM.
See the source configuration for details.
TLS verifies certificates using system roots plus optional CA certificates. Client
certificates and keys must be configured together. Supported SASL mechanisms are
PLAIN, SCRAM-SHA-256, and SCRAM-SHA-512.
Keys use the pinned client’s sticky key partitioner (Kafka-compatible murmur2
hashing for keys, sticky partition selection for null keys). Explicit partitions
override this when
partition_field is configured. Partition-count changes can
move a key to another partition. No global or cross-attempt ordering is promised.
Message formats
JSON mode uses the shared JSON row encoder, including any envelope columns. It attachesContent-Type: application/json, Filament-Operation, and an optional
Filament-Event-Id. Updates and deletes append history; they do not mutate past
records. A string key is UTF-8; a binary key is copied without conversion.
Kafka and NATS sources now decode JSON into top-level columns; use format=json
for those rows. format=message is for explicitly supplied raw envelopes and
does not reconstruct the original JSON bytes from decoded columns.
Message mode requires the public _filament_key, _filament_payload,
_filament_headers, and _filament_event_ts columns. It preserves null versus
empty binary values, ordered duplicate headers, and timestamps at Kafka’s
millisecond precision. key_field is invalid in this mode. Filament operation
and event-ID headers are added; input collisions with those reserved names fail
before publication. This means passthrough of records already carrying those
reserved headers requires an explicit transformation.
With delete_mode=tombstone, delete operations produce a null value and require
a nonnull key. An empty key is valid. Existing raw-envelope tombstones remain
null. Compaction does not imply upsert support or immediate physical deletion.
Durability and failures
The producer requiresacks=all with idempotence enabled. Apply waits for every
record acknowledgment. Broker replication, minimum in-sync replicas, and retention
settings determine the durability of acknowledged data.
Commit closes a bounded run. CommitEpoch certifies already acknowledged
continuous writes and returns per-resource totals. Neither operation makes the
batch or epoch atomic. Aborting cannot retract accepted records.
Delivery is at least once. Producer idempotence protects transport retries;
it does not deduplicate a replayed Filament batch or epoch. Event-ID headers are
metadata for downstream consumers, not broker-enforced deduplication.
A publish error poisons the session. Partial publication may remain visible. A
lost acknowledgment or timeout conservatively leaves destination effects
uncertain, and continuous closure reports an error. Closing a client does not
prove that an already submitted broker request cannot take effect later.
The sink advertises no owner fencing, isolated epochs, or server-enforced bound
on residual effects.
The complete batch is encoded and locally validated before publication.
Outstanding byte limits include key, value, headers, topic, and a framing
allowance; the separately retained encoded batch is additional memory. Broker
limits can still reject a record. Write receipts count value bytes and contain
CRC32C over values in input order, excluding keys, headers, routing, and wire
compression. Empty and null values both contribute zero checksum bytes.