您正在查看过时的Debezium版本的文档。开云体育官方注册网址
如果您想查看本页最新的稳定版本,请前往在这里

发件箱事件路由器

此单个消息转换(SMT)目前正在积极开发中,因此发出的消息结构或其他细节仍可能随着开发的进行而更改。

这个SMT支持MongoDB连接器。

发件箱事件路由器SMT的目的是为发件箱模式提供开箱即用的支持。有关为什么以及如何使用发件箱模式的更多信息,请参阅我们的博客文章使用发件箱模式进行可靠的微服务数据交换

有关更多实施详情,请参阅发件箱SMT设计

一个工作的例子也可以在我们的实例库发件箱目录

例子

为了理解这个SMT中使用的配置和术语,让我们研究一下它与给定的预期发件箱消息相关的部分:

# Kafka消息标题:“id=4d47e190-0402-4048-bc2c-89dd54343cdc”# Kafka消息时间戳:1556890294484 {"eventType": "OrderCreated", "payload": "{\"id\": 1, "lineItems\": [{\"id\": 1, "item\": "Debezium in Action\", "status\": "ENTERED\", "quantity\": 2, "totalPrice\": 39.98}, {\"id\"开云体育官方注册网址: 2, "item\": "Debezium for Dummies\", "status\": "ENTERED\", "quantity\": 1, "totalPrice\": 29.99}], \"orderDate\":\"2019-01-31T12:13:01\", \"customerId\": 123}"}

这个消息是通过转换Debezium原始消息生成的,它看起来像:开云体育官方注册网址

# Kafka消息键:“406c07f3-26f0-4eea-a50c-109940064b8f”# Kafka消息头:“”# Kafka消息时间戳:1556890294484{“id”:“406c07f3-26f0-4eea-a50c- 1099400b8f”,“聚合id”:“1”,“聚合类型”:“订单”,“有效负载”:“{\“id\”:1,\“lineItems\”:[{\“id\”:1,\“item\”:\“Debezium in Action\”,\“status\”:\“ENTERED\”,\“quantity\”:2,\“totalPrice\”:39.98},{\“id\”:2,\“item\”:\“Deb开云体育官方注册网址ezium for Dummies\”,\“status\”:\“ENTERED\”,\“quantity\”:\“quantity\”:\“status\”:\“enter \”,\“status\”:\“ENTERED\”,\“quantity\”:\“quantity\”:1, \“totalPrice \”:29.99}],\“orderDate \”:\“2019 - 01 - 31 - t12:13:01 \”,\“customerId \”:123}”、“时间戳”:1556890294344,“类型”:“OrderCreated”},“源”:{“版本”:“0.9.3。Final", "connector": "postgresql", "name": "dbserver1-bare", "db": "orderdb", "ts_usec": 1556890294448870, "txId": 584, "lsn": 24064704, "schema": "inventory", "table": "outboxevent", "snapshot": false, "last_snapshot_record": null, "xmin": null}, "op": "c", "ts_ms": 1556890294484}

这个结果是用默认配置它假设表结构和基于聚合的事件路由。如果需要自定义行为,SMT是完全可配置的,请检查可用的配置选项

配置

配置选项

财产 默认的 集团 描述

table.field.event.id

id

表格

在发件箱表中包含事件ID的列

table.field.event.key

aggregateid

表格

在发件箱表中包含事件键的列;设置后,该列的值将被用作Kafka消息键

table.field.event.type

类型

表格

在发件箱表中包含事件类型的列

table.field.event.timestamp

表格

你可以选择用一个来自选定字段的值覆盖Kafka消息时间戳,否则它将是Debezium事件处理的时间戳。开云体育官方注册网址

table.field.event.payload

有效载荷

表格

在发件箱表中包含事件有效负载的列

table.field.event.payload.id

aggregateid

表格

在发件箱表中包含有效负载ID的列

table.fields.additional.placement

表,信封

额外的字段可以作为事件信封或消息头的一部分添加;格式是一个以冒号分隔的对或三元的列表,当你想要别名时,例如。id:头,field_name:信封:别名.放置选项包括而且信封
可以进行配置eventType字段。在这种情况下,字段可以放在信封中或其他报头中。

table.field.event.schema.version

表、模式

设置时,它将用作模式版本Kafka连接模式javadoc

route.by.field

aggregatetype

路由器

决定如何路由事件的列,该值将成为主题名称的一部分

route.topic.regex

(? < routedByValue >。*)

路由器

在RegexRouter中使用的默认正则表达式,默认捕获将允许将路由字段替换为中定义的新主题名称route.topic.replacement

route.topic.replacement

outbox.event。$ {routedByValue}

路由器

将在其中路由事件的主题的名称,替换$ {routedByValue}配置的列的值是route.by.field

route.tombstone.on.empty.payload

路由器

无论有无空或有效负载应该导致一个墓碑事件。

开云体育官方注册网址debezium.op.invalid.behavior

警告

开云体育官方注册网址

当Debez开云体育官方注册网址ium监视表时,它并不期望看到“update”行事件,一旦发生,这个转换可以记录为警告、错误或停止进程。选项是警告错误而且致命的

默认表列

列| Type | Modifiers --------------+------------------------+----------- id | uuid | not null aggregatetype | character varying(255) | not null aggregateid | character varying(255) | not null Type | character varying(255) | not null payload | jsonb |

解释默认配置值

在观察了所有这些部分之后,我们可以看到默认配置是怎么做的:

表列 效果

id

id在Kafka消息中显示为头部,这是事件的唯一ID,可以用于消费者端重复数据删除。

aggregatetype

是路由的默认字段,它被附加到主题名称(检查配置route.topic.replacement

aggregateid

成为Kafka消息键,这对于保持Kafka分区内的排序很重要

类型

类型列可以作为消息信封的任何一部分eventType或者消息头。
看到选项table.fields.additional.placement欲知详情。

有效载荷

事件本身的JSON表示形式成为消息的任何一部分有效载荷或者其他元数据,包括eventType作为报头交付,那么有效负载就成为消息本身,而没有封装在信封中

基本配置

变换=发件箱,…transforms.outbox.type = i开云体育官方注册网址o.debezium.transforms.outbox.EventRouter