如何将Apache Ignite缓存条目写入Apache Avro文件?

时间:2020-05-19 16:08:07

标签: java avro ignite

我现在正在执行一项任务,该任务要求我将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文件中。

也许有人可以建议更多的“优雅”解决方案?

1 个答案:

答案 0 :(得分:0)

具有一个表示为Map<BinaryObject, BinaryObject>的Ignite缓存条目(从Ignite请求缓存时应使用.withKeepBinary()),可以提取每个BinaryObject字段(字段名称+字段类型)的定义。 Avro SchemaBuilder可以进一步用于avro模式生成。