2017-04-14 54 views
0

我正在與Apache Kafka一起向Kafka主題發送消息。我試圖在Avro Schemas中使用包含枚舉類型的工會進行消息驗證。但是我在union中使用枚舉類型時遇到了一個問題。我通過POSTMAN工具使用Kafka REST API將記錄/消息發佈到具有模式驗證的主題。下面是請求負載包括架構和記錄在線 -在包含avro模式中的工會中包含enum類型時發出的問題

{ 
    "key_schema": "{\"type\": \"record\", \"name\": \"key\", \"fields\": [{\"name\": \"keyInput\", \"type\": \"string\"}]}", 
    "value_schema": "{\"type\": \"record\", \"name\": \"value\", \"fields\": [{\"name\": \"valueInput1\", \"type\": \"string\"},{\"name\": \"valueInput2\",\"type\":[{\"type\":\"enum\",\"name\":\"actorobjType\",\"symbols\":[\"Agent\",\"Group\"]},\"null\"],\"default\":null}]}", 
    "records": [ 
     { 
      "key": { 
       "keyInput": "testUser-key" 
      }, 
      "value": { 
       "valueInput1": "testUser-value", 
       "valueInput2": "Agent" 
      } 
     } 
    ] 
} 

我收到的時候我嘗試使用上述要求的有效載荷中插入一條記錄下面的錯誤 -

{ 
    "error_code": 42203, 
    "message": "Conversion of JSON to Avro failed: Failed to convert JSON to Avro: Expected start-union. Got VALUE_STRING" 
} 

在不同的網站,包括搜索後計算器,我經歷了suggestion

前來詢問明確指定類型,同時通過如下的記錄 -

{ 
    "key_schema": "{\"type\": \"record\", \"name\": \"key\", \"fields\": [{\"name\": \"keyInput\", \"type\": \"string\"}]}", 
    "value_schema": "{\"type\": \"record\", \"name\": \"value\", \"fields\": [{\"name\": \"valueInput1\", \"type\": \"string\"},{\"name\": \"valueInput2\",\"type\":[{\"type\":\"enum\",\"name\":\"actorobjType\",\"symbols\":[\"Agent\",\"Group\"]},\"null\"],\"default\":null}]}", 
    "records": [ 
     { 
      "key": { 
       "keyInput": "testUser-key" 
      }, 
      "value": { 
       "valueInput1": "testUser-value", 
       "valueInput2": { 
        "enum": "Agent" 
       } 
      } 
     } 
    ] 
} 

但後來我遇到下面的錯誤 -

{ 
    "error_code": 42203, 
    "message": "Conversion of JSON to Avro failed: Failed to convert JSON to Avro: Unknown union branch enum" 
} 

同樣的建議與其他類型如字符串和地圖工會工作正常,但與工會,包括枚舉,這似乎並沒有工作。

我還認爲有可能是一些其他類型的需要被用於枚舉說明書中,因此,我試圖像下面一些換言之 -

"valueInput2": { 
        "string": "Agent" 
       } 

"valueInput2": { 
        "enumeration": "Agent" 
       } 

但是他們沒有似乎工作。請幫我解決這個問題。

回答

0

爲ENUM類型不JSON格式存在,值類型應更改爲糾正一個: 命名空間+類名 你的情況,這將是命名空間+ actorobjtype:「代理」