我现在正在执行一项任务,该任务要求我将Apache Ignite缓存存储的数据写入Avro。
不幸的是,我无法访问用于创建缓存存储对象的初始Java类。
我唯一的来源是Apache Ignite(它是Java API)。缓存本身表示为IgniteCache<Object, Object>
。实际上,每个缓存条目都是一个键值对,其中键被实现为AffinityKey,并且值包含与项目相关的对象。
将缓存条目转换为JSON时,其外观如下所示:
{
"AffinityKey [key=1, affKey=1f1a11b-ba1e-1cd1-1c11-c11111ab1111]": {
"version": null,
"name": "Name 1",
"description": "Description 1",
"interests": [
"int1",
"int2",
"int3",
"int4"
],
"hobbies": [
"hobby1",
"hobby2",
"hobby3"
],
"classId": 11111,
"creator": "5b90fb41e0eb212c4736d186",
"editorId": null,
"logoConfigurationId": 85,
"editTimeout": null,
"active": false,
"lastActionTime": {
"year": 2020,
"month": "MAY",
"nano": 143000000,
"monthValue": 5,
"dayOfMonth": 18,
"hour": 14,
"minute": 1,
"second": 4,
"dayOfYear": 139,
"dayOfWeek": "MONDAY",
"chronology": {
"id": "ISO",
"calendarType": "iso8601"
}
},
"status": "Attention required",
"lastJobId": null
}
}
有人可以建议我如何将Ignite缓存条目序列化为Avro吗? 据我所知,avro-serialization需要Avro-schema。为此,我需要知道缓存条目中捕获的每个字段的名称和类型。我看到的用于架构创建的唯一方法是获取表示为BinaryObject的入口键和入口值,然后收集所有字段名称和类型。拥有对象字段的所有名称-类型对,可以手动构造某种json,以便将其进一步存储在.asvc文件中。
也许有人可以建议更多的“优雅”解决方案?
答案 0 :(得分:0)
具有一个表示为Map<BinaryObject, BinaryObject>
的Ignite缓存条目(从Ignite请求缓存时应使用.withKeepBinary()
),可以提取每个BinaryObject字段(字段名称+字段类型)的定义。 Avro SchemaBuilder可以进一步用于avro模式生成。