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

Avro序列化

De开云体育官方注册网址bezium连接器适用于卡夫卡框架连接到捕获每个行级改变数据库中生成一个事件记录。开云体育电动老虎机对于每个变更事件记录,Debezium连接器完成下列操作:开云体育官方注册网址

  1. 应用配置的转换。

  2. 序列化记录键和值到一个二进制形式通过使用配置卡夫卡连接转换器

  3. 将记录写入正确的卡夫卡的话题。

您可以指定为每个Debezium转换器连接器实例。开云体育官方注册网址卡夫卡连接提供了一个JSON转换器,序列化键和值记录到的JSON文档。默认行为是JSON转换器包括记录的消息模式,这使得每个记录非常详细。的开云体育官方注册网址Debezium教程显示的记录是什么样子当载荷和模式都包括在内。如果你想要记录与JSON序列化,考虑设置以下连接器配置属性:

  • key.converter.schemas.enable

  • value.converter.schemas.enable

设置这些属性从每个记录不包括详细的模式信息。

另外,您可以通过使用序列化记录键和值Apache Avro。Avro二进制格式紧凑和高效。Avro模式可以确保每个记录有正确的结构。Avro模式演化机制使模式演变。这对Debezium连接器至关重要,动态生成开云体育官方注册网址每个记录的模式匹配的数据库表的结构发生了变化。开云体育电动老虎机随着时间的推移,变化事件记录写入相同的卡夫卡主题可能有不同的版本相同的模式。Avro序列化使更改事件记录的消费者更容易适应变化的记录模式。

使用Apache Avro序列化,必须部署模式注册表管理Avro消息模式及其版本。可用的选项包括Apicurio API和模式注册表以及汇合的注册表。都是这里描述。

关于Apicurio API和模式注册表

Apicurio注册表开源项目提供了一些组件,这些组件使用Avro:

  • Avro转换器,您可以指定在Debezium连接器配置。开云体育官方注册网址这个转换器地图卡夫卡Avro模式连接模式。然后转换器使用Avro模式序列化的键和值记录到Avro紧凑的二进制形式。

  • 一个API和模式注册跟踪:

    • Avro模式用于卡夫卡的话题。

    • Avro转换器发送生成Avro模式。

    因为Avro模式存储在注册中心,每个记录需要包含只有一个小模式标识符。这使得每个记录更小。一个I / O系统就像卡夫卡,这意味着更多的生产者和消费者总吞吐量。

  • Avro并行转换器(序列化器和反序列化器)卡夫卡生产者和消费者。卡夫卡消费者消费您编写的应用程序更改事件记录可以使用Avro并行转换器来更改事件记录进行反序列化。

使用与Debezium Apicurio注册,Apicurio注册表开云体育官方注册网址转换器及其依赖项添加到卡夫卡连接容器映像,您使用的是运行一个Debezium连接器。

Apicurio注册表项目还提供了一个JSON转换器。这个转换器结合的优势可以减少复杂性与人类可读的JSON消息。消息不包含模式信息本身,但只有一个模式ID。

使用转换器提供Apicurio注册需要提供apicurio.registry.url

部署概述

部署Debezium连接开云体育官方注册网址器使用Avro序列化,你必须完成三个主要任务:

  1. 部署一个Apicurio API和模式注册表实例。

  2. 安装Avro转换器安装包到一个插件目录中。这不是需要时使用开云体育官方注册网址Debezium连接集装箱图片,看细节部署与Debezium容器开云体育官方注册网址

  3. 配置一个Debezium开云体育官方注册网址连接器实例使用Avro序列化通过设置配置属性如下:

    key.converter = io.apicurio.registry.utils.converter。AvroConverter key.converter.apicurio.registry。url = http://apicurio: 8080 / api key.converter.apicurio.registry.global-id = io.apicurio.registry.utils.serde.strategy。GetOrCreateIdStrategy value.converter = io.apicurio.registry.utils.converter。AvroConverter value.converter.apicurio.registry。url = http://apicurio: 8080 / api value.converter.apicurio.registry.global-id = io.apicurio.registry.utils.serde.strategy.GetOrCreateIdStrategy

在内部,卡夫卡连接总是使用JSON键/值转换器用于存储配置和补偿。

部署与Debezium容器开云体育官方注册网址

在您的环境中,您可能想要使用一个容器提供Debezium映像部署Debezium连接器使用Avro序列化。开云体育官方注册网址按照程序来做。在这个过程中,启用Apicurio Debezium卡夫卡容器连接图像转换器,并配置Debezium连接器使用Av开云体育官方注册网址ro转换器。

先决条件
  • 您已经安装了码头工人和足够的权利来创建和管理容器。

  • 您下载Debezium连接器插件(s)开云体育官方注册网址,你想部署Avro序列化。

过程
  1. 部署Apicurio注册表的实例。

    下面的示例使用一个非生产、内存Apicurio注册实例:

    码头工人运行- - rm -名字apicurio \ - p 8080:8080 apicurio / apicurio-registry-mem: 1.3.2.Final
  2. 卡夫卡的Debe开云体育官方注册网址zium容器图像连接运行,配置提供Avro转换器通过启用Apicurio通过ENABLE_APICURIO_CONVERTERS = true环境变量:

    码头工人运行- - rm -名称连接\——联系管理员:管理员\——链接卡夫卡:卡夫卡\——连接mysql: mysql \——链接apicurio: apicurio \ - e ENABLE_APICURIO_CONVERTERS = true \ - e GROUP_ID = 1 \ - e CONFIG_STORAGE_TOPIC = my_connect_configs \ - e OFFSET_STORAGE_TOPIC = my_connect_offsets \ - e KEY_CONVERTER = io.apicurio.registry.utils.converter。AvroConverter \ - e VALUE_CONVERTER = io.apicurio.registry.utils.converter。AvroConverter \ -e CONNECT_KEY_CONVERTER=io.apicurio.registry.utils.converter.AvroConverter \ -e CONNECT_KEY_CONVERTER_APICURIO.REGISTRY_URL=http://apicurio:8080 \ -e CONNECT_KEY_CONVERTER_APICURIO.REGISTRY_GLOBAL-ID=io.apicurio.registry.utils.serde.strategy.GetOrCreateIdStrategy \ -e CONNECT_VALUE_CONVERTER=io.apicurio.registry.utils.converter.AvroConverter \ -e CONNECT_VALUE_CONVERTER_APICURIO_REGISTRY_URL=http://apicurio:8080 \ -e CONNECT_VALUE_CONVERTER_APICURIO_REGISTRY_GLOBAL-ID=io.apicurio.registry.utils.serde.strategy.GetOrCreateIdStrategy \ -p 8083:8083 debezium/connect:1.5

融合性的模式注册表

有一个选择模式注册表实现由汇合的。配置略有不同。

  1. 在你Debezi开云体育官方注册网址um连接器配置,指定以下属性:

    key.converter = io.confluent.connect.avro。AvroConverter key.converter.schema.registry.url=http://localhost:8081 value.converter=io.confluent.connect.avro.AvroConverter value.converter.schema.registry.url=http://localhost:8081
  2. 部署汇合的模式的一个实例注册表:

    码头工人运行- - rm -名字schema-registry \——链接饲养员\ - e SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL =管理员:2181 \ - e SCHEMA_REGISTRY_HOST_NAME = schema-registry \ - e SCHEMA_REGISTRY_LISTENERS = http://schema-registry: 8081 \ - p 8181:8181 confluentinc / cp-schema-registry
  3. 运行配置为使用Avro卡夫卡连接图像:

    码头工人运行- - rm -名称连接\——联系管理员:管理员\——链接卡夫卡:卡夫卡\——连接mysql: mysql \——链接schema-registry: schema-registry \ - e GROUP_ID = 1 \ - e CONFIG_STORAGE_TOPIC = my_connect_configs \ - e OFFSET_STORAGE_TOPIC = my_connect_offsets \ - e KEY_CONVERTER = io.confluent.connect.avro。AvroConverter \ - e VALUE_CONVERTER = io.confluent.connect.avro。AvroConverter \ -e CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL=http://schema-registry:8081 \ -e CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL=http://schema-registry:8081 \ -p 8083:8083 debezium/connect:1.5
  4. 运行一个控制台读取新的Avro消息的消费者db.myschema.mytable主题和解码JSON:

    码头工人运行- - rm -名字avro-consumer \——联系管理员:管理员\——链接卡夫卡:卡夫卡\——连接mysql: mysql \——链接schema-registry: schema-registry \ debezium /连接:1.5 \ /卡夫卡/ bin / kafka-consol开云体育官方注册网址e-consumer。sh \——bootstrap-server卡夫卡:9092 \房地产打印。关键= true \——格式化程序io.confluent.kafka.formatter。schema.registry AvroMessageFormatter \——属性。url = http://schema-registry: 8081 \ db.myschema.mytable——主题

命名

在Avro如上所述文档,名字必须遵守以下规则:

  • 开始(A-Za-z_)

  • 随后只包含(A-Za-z0-9_)字符

开云体育官方注册网址Debezium使用列的名称对应的Avro领域的基础。这可能导致问题在序列化如果列名不也坚持Avro命名规则。每个Deb开云体育官方注册网址ezium连接器提供了一个配置属性,sanitize.field.names你可以设置真正的如果你有列不遵守Avro规则名称。设置sanitize.field.names真正的实际上允许序列化的字段不符合无需修改您的模式。

获得更多的信息

这篇文章Debezium博开云体育官方注册网址客描述了概念的序列化器,转换器,和其他组件,并讨论了使用Avro的优点。一些卡夫卡连接转换器的细节因为这帖子是略有改变。

对于一个完整的示例使用Avro作为Debezium改变数据事件消息格式,看看开云体育官方注册网址MySQL和Avro消息格式