我们定义了一个avro模式,并使用代码生成器在Java和
这是我们用来从avro模式生成java类的代码生成器
https://plugins.gradle.org/plugin/com.commercehub.gradle.plugin.avro
和使用
现在,我尝试使用c#生产者将消息发布到Kafka上,并尝试使用java消费者消费它。这适用于大多数数据类型,但以下合同“OptionalComposition”除外。
{
"type": "record",
"name": "OptionalComposition",
"doc": "Contract to test composition with optional field ",
"namespace": "com.abc.avro.contracts",
"fields": [
{ "name": "partOf", "type": ["null", "com.abc.avro.contracts.Reference"], "default": null }
]
}
{
"type": "record",
"name": "Reference",
"namespace": "com.abc.avro.contracts",
"fields": [
{ "name": "identifier", "type": "string" }
,
{ "name": "name", "type": "string" }
]
}
我能够通过使用我的gradle插件设置一个额外的属性(stringType到“CharSequence”)来解决这个问题,以从. avsc文件生成我的. java文件。
以下是我们用于从.avsc文件生成.java文件的gradle插件的链接
https://plugins.gradle.org/plugin/com.commercehub.gradle.plugin.avro
以下是我正在谈论的物业的文档 https://github.com/davidmc24/gradle-avro-plugin#stringtype
这是我用来生成POJOs的gradle任务。avsc文件
task generateContracts(type: GenerateAvroJavaTask, dependsOn: clearContracts) {
fieldVisibility = "PRIVATE"
dateTimeLogicalType = 'JSR310'
outputCharacterEncoding = "UTF-8"
stringType = "CharSequence"
source("src/main/resources/avro")
outputDir = file("src/main/java/")
}
通过添加stringType=“CharSequence”,我们要求代码生成器生成字符串类型属性,以将java.lang.CharSequence作为数据类型,而不是java.lang.String
我在两个独立的AVCS模式文件中定义了记录的两个版本。我使用命名空间来区分版本SimpleV1.avsc 示例JSON 版本2只是有一个带有默认值的附加描述字段。 SimpleV2.avsc 示例JSON 这两个模式都序列化为Java类。在我的示例中,我将测试向后兼容性。V1写入的记录应由使用V2的读取器读取。我希望看到插入默认值。只要我不使用枚举,这就可以工作。 检查读者作家兼容性方法确认模式是
我一直在尝试将avro通用记录进行串行化,并生成avro串行化的数据发送给Kafka。主要目标是不使用合并模式注册表存储模式,而是将模式与序列化数据一起发送,以便从kafka主题中提取并反序列化。 下面是AvroSerializer用于生成Avro数据的部分。 Kafka中出现的序列化数据如下所示。
我目前正在寻找意外行为的解决方案,这些意外行为是在使用Java处理特定的AVRO模式演化场景时出现的,我还在消费者中做了一次深度复制,将GenericRecord类解析为从AVRO模式生成的特定类。 为了解释正在发生的事情,我将使用一个简化的模式示例: 这只是一个简单的模式,有三个字符串字段,都是可选的,因为它们都有默认值。假设在某个时候我想添加另一个字符串字段,并删除一个字段,因为不再需要它,您
我收到Kafka主题中的二进制Avro文件,我必须对它们进行反序列化。在Kafka收到的消息中,我可以在每条消息的开头看到一个模式。我知道不嵌入模式并将其与实际的Avro文件分离是一种更好的做法,但我无法控制生产者,也无法更改。 我的代码在Apache Storm上运行。首先,我创建一个读卡器: 然后,我尝试反序列化消息,但不声明架构: 但当消息到达时,我会收到一个错误: 我看到的所有答案都是关于
我正在使用kafka从源接收数据,我正在使用用< code>Node.js编写的消费者应用程序,并使用< code>kafka-node连接到kafka服务器。另一方面,生产者是用< code>Java编写的,他们使用一些kafka流库来产生带有模式的avro消息。我可以接收消息,但它们是avro序列化的,下面是我接收的序列化消息格式- 我正在尝试反序列化它,但无法使用 npm模块,因为avsc只
我有两个问题: > 我曾尝试使用模式V1编写记录,并使用模式V2读取记录,但出现以下错误: org.apache.avro。AvroTypeException:找到foo,应为foo 我使用avro-1.7.3和: 以下是这两种模式的示例(我也尝试过添加命名空间,但没有成功)。 架构V1: 架构V2: 提前谢谢。