1

我有一个用户余额更改的用例。我想将所有用户平衡事件放在 1 个主题中。但是由于推荐奖金、获胜奖金、提款、存款等多种事件,用户余额正在发生变化。这可以通过这样的嵌套记录来实现:

{
"name": "userBalance",
"type": "record",
"fields": [
       {
            "name": "cashDeposit",
            "type": 
                   {
                        "type" : "record",
                        "name" : "userCashDeposit",
                        "fields" : [
                            {"name": "id", "type": "long"},
                            {"name": "amount", "type": "float"}
                        ]
                    }
        },
        {
            "name": "cashWithdraw",
            "type": {
                        "type" : "record",
                        "name" : "userCashWithdraw",
                        "fields" : [
                            {"name": "id", "type": "long"},
                            {"name": "amount", "type": "float"}
                        ]
                    }
        }
    ]
}

但这会使所有嵌套记录都按要求进行,而我想严格执行这些事件中的任何一个都存在于事件中,并严格遵守该事件的记录。Avro 模式支持“oneOf”,但我找不到在任何地方用于 Confluent Schema Registry 用例的 oneOf。有什么方法可以使用它吗?

4

1 回答 1

1

这可以工作:

{
"name": "userBalance",
"type": "record",
"fields": [
       {
            "name": "userBalance",
            "type": [
                   {
                        "type" : "record",
                        "name" : "userCashDeposit",
                        "fields" : [
                            {"name": "id", "type": "long"},
                            {"name": "amount", "type": "float"}
                        ]
                    },
                    {
                         "type" : "record",
                        "name" : "userCashWithdraw",
                        "fields" : [
                            {"name": "id", "type": "long"},
                            {"name": "amount", "type": "float"}
                        ]
                     }
             ]
        }
    ]
}
于 2017-01-05T06:42:52.850 回答