Apache kafka 如何使用Kafka Connect AVRO的模式注册表

Apache kafka 如何使用Kafka Connect AVRO的模式注册表,apache-kafka,avro,apache-kafka-connect,confluent-schema-registry,Apache Kafka,Avro,Apache Kafka Connect,Confluent Schema Registry,我最近开始探索卡夫卡和卡夫卡连接,并做了一些初步设置。 但是想在模式注册部分探索更多 我的模式注册表现在启动,我应该做什么 我在AVRO_schema.avsc中存储了一个AVRO模式 这是模式 { "name": "FSP-AUDIT-EVENT", "type": "record", "namespace": "com.acme.avro", "fields": [ { "name": "ID", "type": "string" },

我最近开始探索卡夫卡和卡夫卡连接,并做了一些初步设置。 但是想在模式注册部分探索更多

我的模式注册表现在启动,我应该做什么

我在AVRO_schema.avsc中存储了一个AVRO模式

这是模式

{
  "name": "FSP-AUDIT-EVENT",
  "type": "record",
  "namespace": "com.acme.avro",
  "fields": [
    {
      "name": "ID",
      "type": "string"
    },
    {
      "name": "VERSION",
      "type": "int"
    },
    {
      "name": "ACTION_TYPE",
      "type": "string"
    },
    {
      "name": "EVENT_TYPE",
      "type": "string"
    },
    {
      "name": "CLIENT_ID",
      "type": "string"
    },
    {
      "name": "DETAILS",
      "type": "string"
    },
    {
      "name": "OBJECT_TYPE",
      "type": "string"
    },
    {
      "name": "UTC_DATE_TIME",
      "type": "long"
    },
    {
      "name": "POINT_IN_TIME_PRECISION",
      "type": "string"
    },
    {
      "name": "TIME_ZONE",
      "type": "string"
    },
    {
      "name": "TIMELINE_PRECISION",
      "type": "string"
    },
    {
      "name": "AUDIT_EVENT_TO_UTC_DT",
      "type": [
        "string",
        "null"
      ]
    },
    {
      "name": "AUDIT_EVENT_TO_DATE_PITP",
      "type": "string"
    },
    {
      "name": "AUDIT_EVENT_TO_DATE_TZ",
      "type": "string"
    },
    {
      "name": "AUDIT_EVENT_TO_DATE_TP",
      "type": "string"
    },
    {
      "name": "GROUP_ID",
      "type": "string"
    },
    {
      "name": "OBJECT_DISPLAY_NAME",
      "type": "string"
    },
    {
      "name": "OBJECT_ID",
      "type": [
        "string",
        "null"
      ]
    },
    {
      "name": "USER_DISPLAY_NAME",
      "type": [
        "string",
        "null"
      ]
    },
    {
      "name": "USER_ID",
      "type": "string"
    },
    {
      "name": "PARENT_EVENT_ID",
      "type": [
        "string",
        "null"
      ]
    },
    {
      "name": "NOTES",
      "type": [
        "string",
        "null"
      ]
    },
    {
      "name": "SUMMARY",
      "type": [
        "string",
        "null"
      ]
    }
  ]
}
我的模式是否有效。我从JSON在线转换了它? 我不确定这个架构文件的位置应该放在哪里。 请指导我接下来的步骤 . 我从Lambda函数和JDBC源发送记录

那么,基本上我如何实施AVRO模式和测试呢? 我必须更改avro消费者属性文件中的任何内容吗

或者这是注册模式的正确方法

   ./bin/kafka-avro-console-producer \
                 --broker-list b-3.**:9092,b-**:9092,b-**:9092 --topic AVRO-AUDIT_EVENT \
                 --property value.schema='{"type":"record","name":"myrecord","fields":[{"name":"f1","type":"string"}]}'





curl -X POST -H "Content-Type: application/vnd.schemaregistry.v1+json"     --data '{"schema" : "{\"type\":\"struct\",\"fields\":[{\"type\":\"string\",\"optional\":false,\"field\":\"ID\"},{\"type\":\"string\",\"optional\":true,\"field\":\"VERSION\"},{\"type\":\"string\",\"optional\":true,\"field\":\"ACTION_TYPE\"},{\"type\":\"string\",\"optional\":true,\"field\":\"EVENT_TYPE\"},{\"type\":\"string\",\"optional\":true,\"field\":\"CLIENT_ID\"},{\"type\":\"string\",\"optional\":true,\"field\":\"DETAILS\"},{\"type\":\"string\",\"optional\":true,\"field\":\"OBJECT_TYPE\"},{\"type\":\"string\",\"optional\":true,\"field\":\"UTC_DATE_TIME\"},{\"type\":\"string\",\"optional\":true,\"field\":\"POINT_IN_TIME_PRECISION\"},{\"type\":\"string\",\"optional\":true,\"field\":\"TIME_ZONE\"},{\"type\":\"string\",\"optional\":true,\"field\":\"TIMELINE_PRECISION\"},{\"type\":\"string\",\"optional\":true,\"field\":\"GROUP_ID\"},{\"type\":\"string\",\"optional\":true,\"field\":\"OBJECT_DISPLAY_NAME\"},{\"type\":\"string\",\"optional\":true,\"field\":\"OBJECT_ID\"},{\"type\":\"string\",\"optional\":true,\"field\":\"USER_DISPLAY_NAME\"},{\"type\":\"string\",\"optional\":true,\"field\":\"USER_ID\"},{\"type\":\"string\",\"optional\":true,\"field\":\"PARENT_EVENT_ID\"},{\"type\":\"string\",\"optional\":true,\"field\":\"NOTES\"},{\"type\":\"string\",\"optional\":true,\"field\":\"SUMMARY\"},{\"type\":\"string\",\"optional\":true,\"field\":\"AUDIT_EVENT_TO_UTC_DT\"},{\"type\":\"string\",\"optional\":true,\"field\":\"AUDIT_EVENT_TO_DATE_PITP\"},{\"type\":\"string\",\"optional\":true,\"field\":\"AUDIT_EVENT_TO_DATE_TZ\"},{\"type\":\"string\",\"optional\":true,\"field\":\"AUDIT_EVENT_TO_DATE_TP\"}],\"optional\":false,\"name\":\"test\"}"}' http://localhost:8081/subjects/view/versions
接下来我要做什么

但当我试图查看我的模式时,我只得到下面的结果

curl --silent -X GET http://localhost:8081/subjects/AVRO-AUDIT-EVENT/versions/latest
这就是结果

{"subject":"AVRO-AUDIT-EVENT","version":1,"id":161,"schema":"{\"type\":\"string\",\"optional\":false}"}
为什么我看不到完整注册的架构

当我尝试删除模式时也是如此

我得到下面的错误

{"error_code":405,"message":"HTTP 405 Method Not Allowed"
我不确定我的架构是否正确注册

请帮帮我。 提前谢谢

我的模式有效吗

您可以使用注册表的RESTAPI尝试并提交它,然后查看

我不确定这个架构文件的位置应该放在哪里

不清楚你是如何发送消息的

如果您确实编写了卡夫卡生产者代码,则将其存储在代码中(作为字符串)或作为资源文件。。如果使用Java,则可以使用SchemaBuilder类来创建Schema对象

如果尚未使用Avro模式和序列化程序,则需要重写生产者

如果我们创建AVRO模式,它也可以用于Json

Avro是一种二进制格式,但它有一个JSONDecoder

AVRO架构属性文件的URL应该是什么

一旦您知道如何启动它,它就需要是模式注册表的IP。(使用模式注册表启动)

我必须更改avro消费者属性文件中的任何内容吗

您需要使用Avro反序列化程序

这是注册架构的正确方法吗

.>
/bin/kafka avro控制台制作人\

不完全是。这就是使用模式生成消息的方式(并且需要使用正确的模式)。您还必须提供
--属性schema.registry.url


您使用注册表的REST API来注册和验证架构

Hi..感谢您的回复…像往常一样,只有您才能为我们这样的人将Kafka learning提升到下一个级别。因此,我的架构注册表运行良好。但正如您所说,我需要将其保存到资源文件中。我可以知道确切的位置吗?我没有任何代码只是配置。其次当你们说我必须重写producer时,在JDBC连接器的上下文中这意味着什么?我必须改变它的唯一属性?当我阅读JDBC的主题时,我仍然只看到jason格式1)JavaScript对象表示法并没有写“jason”。2) 您必须在连接器属性中配置AvroConverter以获取Avro数据。源连接器是一种生产者类型。3) Kafka Connect创建自己的模式,所以你不必担心这些,所以我只需要使用属性文件..来自JDBC的数据将由连接器转换为AVRO?我做了配置更改,启动了模式注册表,然后是连接器…但是当数据插入JDBC,我试图从主题中读取时,我丢失了一些数据..所有列都没有显示它应该会全部显示出来默认情况下为列。但是,如果您使用的是avro控制台消费者,那么它可以正常工作,并且问题存在于其他地方