Connectors see Connect's own types (structs, Decimal, Timestamp) with an optional schema; a converter maps them to bytes. Workers set defaults; connectors may override them.
| Converter | Bytes in Kafka 129 | Where the schema lives |
|---|---|---|
| StringConverter, ByteArrayConverter, JsonConverter (schemas off) | Text, bytes, plain JSON | Nowhere |
| JsonConverter, schemas on | {"schema": ..., "payload": ...} | In every record |
| JsonConverter + schema.content | Plain JSON | In the sink's config (Kafka 4.2+) |
| Avro 129 , Protobuf, JSON Schema | Bytes plus a schema ID | In a registry (Schema Registry) |
The schema has to come from somewhere, as the order sink shows without one:
# The 6.8.5 sink without schema.content, once expecting an envelope and once schemaless
C=localhost:33083/connectors/booknest-orders-noschema
for e in true false; do
jq --arg e $e '. + {"table.name.format": "test", "value.converter.schemas.enable": $e}' \
listings/orders-sink.json > test.json
curl -s -X PUT -H 'Content-Type: application/json' -d @test.json $C/config >/dev/null
sleep 15; curl -s $C/status | jq -r --arg e $e '.tasks[0] | "\($e): \(.state): \(.trace |
split("\n") | map(select(test("^Caused"))) | last | sub(".*errors\\."; "") | .[0:76])"'
curl -s -X DELETE $C
doneOutput
true: FAILED: DataException: JsonConverter with schemas.enable requires "schema" and "payl false: FAILED: ConnectException: PK mode for table 'test' is RECORD_VALUE, but record value
The shop never wrote the envelope, which would triple each event's size; a schemaless map gives the JDBC sink nothing to build a table from. schema.content (KIP-1054) suits one fixed schema; a registry is the usual production answer.