anchor.diff:  }
   ----
   
  -This result was achieved with the {link-prefix}:{link-outbox-event-router}#outbox-event-router-configuration-options[default configuration] which assumes a table structure and event routing based on aggregates. In case you want a custom behavior, the SMT is fully configurable, check the {link-prefix}:{link-outbox-event-router}#outbox-event-router-configuration-options[available configuration options].
  -
  -== Configuration
  -
  -[[outbox-event-router-configuration-options]]
  -=== Configuration options
  -[cols="30%a,10%a,10%a,50%a"]
  -|===
  -|Property
  -|Default
  -|Group
  -|Description
  -
  -|[[outbox-event-router-property-table-field-event-id]]<<outbox-event-router-property-table-field-event-id, `table.field.event.id`>>
  -|`id`
  -|Table
  -|The column which contains the event ID within the outbox table
  -
  -|[[outbox-event-router-property-table-field-event-key]]<<outbox-event-router-property-table-field-event-key, `table.field.event.key`>>
  -|`aggregateid`
  -|Table
  -|The column which contains the event key within the outbox table; when this is set the value of this column will be used as a Kafka message key
  -
  -|[[outbox-event-router-property-table-field-event-timestamp]]<<outbox-event-router-property-table-field-event-timestamp, `table.field.event.timestamp`>>
  -|
  -|Table
  -|Optionally you can override the Kafka message timestamp with a value from a chosen field, otherwise it is the {prodname} event processed timestamp.
  -
  -|[[outbox-event-router-property-table-field-event-payload]]<<outbox-event-router-property-table-field-event-payload, `table.field.event.payload`>>
  -|`payload`
  -|Table
  -|The column which contains the event payload within the outbox table
  -
  -|[[outbox-event-router-property-table-field-event-payload-id]]<<outbox-event-router-property-table-field-event-payload-id, `table.field.event.payload.id`>>
  -|`aggregateid`
  -|Table
  -|The column which contains the payload ID within the outbox table
  -
  -|[[outbox-event-router-property-table-fields-additional-placement]]<<outbox-event-router-property-table-fields-additional-placement, `table.fields.additional.placement`>>
  -|
  -|Table, Envelope
  -|Extra fields can be added as part of the event envelope or as message header; the format is a list of colon-delimited pairs or trios when you desire to have aliases, e.g. `id:header,field_name:envelope:alias`. Placement options are `header` and `envelope`.
  -
  -|[[outbox-event-router-property-table-field-event-schema-version]]<<outbox-event-router-property-table-field-event-schema-version, `table.field.event.schema.version`>>
  -|
  -|Table, Schema
  -|When set, it is used as schema version as in the https://kafka.apache.org/20/javadoc/org/apache/kafka/connect/data/ConnectSchema.html#version--[Kafka Connect Schema] javadoc
  -
  -|[[outbox-event-router-property-route-by-field]]<<outbox-event-router-property-route-by-field, `route.by.field`>>
  -|`aggregatetype`
  -|Router
  -|The column which determines how the events will be routed, the value will become part of the topic name
  -
  -|[[outbox-event-router-property-route-topic-regex]]<<outbox-event-router-property-route-topic-regex, `route.topic.regex`>>
  -|`(?<routedByValue>.*)`
  -|Router
  -|The default regex to use within the RegexRouter, the default capture will allow to replace the routed field into a new topic name defined in `route.topic.replacement`
  -
  -|[[outbox-event-router-property-route-topic-replacement]]<<outbox-event-router-property-route-topic-replacement, `route.topic.replacement`>>
  -|`outbox.event{zwsp}.pass:[${routedByValue}]`
  -|Router
  -|The name of the topic in which the events will be routed, a replacement `pass:[${routedByValue}]` is available which is the value of The column configured via `route.by.field`
  -
  -|[[outbox-event-router-property-route-tombstone-on-empty-payload]]<<outbox-event-router-property-route-tombstone-on-empty-payload, `route.tombstone.on.empty.payload`>>
  -|`false`
  -|Router
  -|Whether or not an empty or `null` payload should cause a tombstone event.
  -
  -|[[outbox-event-router-property-debezium-op-invalid-behavior]]<<outbox-event-router-property-debezium-op-invalid-behavior, `debezium.op.invalid.behavior`>>
  -|`warn`
  -|{prodname}
  -|While {prodname} is monitoring the table, it is not expecting to see 'update' row events, in case it happens, this transform can log it as warning, error or stop the process. Options are `warn`, `error` and `fatal`
  -|===
  -
  -=== Default table columns
  +This example of a {prodname} outbox message is based on the {link-prefix}:{link-outbox-event-router}#outbox-event-router-configuration-options[default `outbox.EventRouter` configuration], which assumes an outbox table structure and event routing based on aggregates. To customize behavior, the `outbox.EventRouter` SMT provides numerous {link-prefix}:{link-outbox-event-router}#outbox-event-router-configuration-options[configuration options].
  +
  +// Type: concept
  +// Title: Outbox table structure expected by {prodname} outbox event router SMT
  +// ModuleID: outbox-table-structure-expected-by-debezium-outbox-eventrouter-smt
  +[[basic-outbox-table]]
  +== Basic outbox table
  +
  +To apply the default `outbox.EventRouter` SMT configuration, your outbox table is assumed to have the following columns: 
   
   [source]
   ----
  
positive.code: value.converter=io.debezium.converters.ByteBufferConverter
  ----
  
  By default only the `payload` column value (the Avro data) is the sole message value.
  Using `ByteBufferConverter` as the value converter propagates that value as-is into the Kafka message value.
  
  [[emitting-messages-with-additional-fields]]
  === Emitting messages with additional fields
  
  The outbox table may contain additional columns that need to be included in the emitted Kafka message.
  Suppose the table contains an `eventType` column that indicates the type a given event is (e.g. for events of the "purchase order" aggregate type, there might be event types like "order created", "order shipped", etc.).
  
  To emit the `eventType` column in the Kafka message headers, use:
  
  [source]
  ----
  
negative.code: transforms.outbox.type=io.debezium.transforms.outbox.EventRouter
  ----
  
  // Type: concept
  // Title: Using Avro as the payload format in {prodname} outbox messages
  // ModuleID: using-avro-as-the-payload-format-in-debezium-outbox-messages
  [[avro-as-payload-format]]
  == Using Avro as the payload format
  
  The `outbox.EventRouter` SMT supports arbitrary payload formats. The `payload` column value in an outbox table is passed on transparently. An alternative to working with JSON is to use Avro.
  This can be beneficial for message format governance and for ensuring that outbox event schemas evolve in a backwards-compatible way.
  
  How a source application produces Avro formatted content for outbox message payloads is out of the scope of this documentation.
  One possibility is to leverage the `KafkaAvroSerializer` class to serialize `GenericRecord` instances.
  To ensure that the Kafka message value is the exact Avro binary data,
  apply the following configuration to the connector:
  
  [source]
  