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

How can I write Apache Ignite cache entry to Apache Avro file?

我现在正在执行一项任务,需要将 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 序列化需要 Avro 模式。为此,我需要知道缓存条目中捕获的每个字段的名称和类型。我看到的模式创建的唯一方法是获取表示为 BinaryObject 的条目键和条目值,然后收集所有字段名称和类型。拥有对象字段的所有名称类型对,可以手动构造某种 json 以进一步将其存储在 .asvc 文件中。

也许有人可以就更多 'elegant' 解决方案提出建议?

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