簡體   English   中英

如何從 JSON object 生成 Kafka Schema

[英]How to generate Kafka Schema from JSON object

我有一個示例 JSON 數據,其中一些嵌套鍵包含不同的值類型,如整數、浮點數和字符串:

{
    "ordertime": 1497014222380,
    "orderid": 18,
    "itemid": "Item_184",
    "address": {
        "city": "Mountain View",
        "state": "CA",
        "zipcode": 94041
    }
}

我需要編寫一個要在 Kafka Schema Registry 中注冊的 Schema,因此這個示例 JSON 數據可以使用 JSON_SR、AVRO 或 Protobuf 進行序列化。

Is there any generator library for Python or Node that can take the JSON data object as an input and output Kafka Schema for one of three serializers, such as JSON_SR, AVRO or Protobuf?

下面是 JSON Schema 的示例,用於定義具有三個字段的 object:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http://example.com/myURI.schema.json",
  "title": "SampleRecord",
  "description": "Sample schema to help you get started.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "myField1": {
      "type": "integer",
      "description": "The integer type is used for integral numbers."
    },
    "myField2": {
      "type": "number",
      "description": "The number type is used for any numeric type, either integers or floating point numbers."
    },
    "myField3": {
      "type": "string",
      "description": "The string type is used for strings of text."
    }
  }
}

Is there any generator library for Python or Node that can take the JSON data object as an input and output Kafka Schema for one of three serializers, such as JSON_SR, AVRO or Protobuf?

實際上,與模式注冊表集成的模式沒有任何特定於 kafka 的內容,它實際上只是一個普通的 JSON 模式或 Avro 模式或 Protobuf 模式。

為了縮小范圍,假設您使用的是 python 客戶端並選擇使用 JSON 進行序列化,那么 go 的方法是:

  • 為您的數據創建一個 JSON 架構。 如上所述,卡夫卡沒有關於該步驟的具體內容。 手動制作它是我的建議(見我的結尾不是下面)雖然如果你喜歡生成它,像jsonformatterjsonschema.net這樣的任何工具都可能是你正在尋找的
  • 使用Confluent 的 Python 序列化生產者並將其配置為使用jsonserializer
  • jsonserializer配置為指向架構注冊表,並將其schema_str參數設置為您在上面獲得的架構。

如果您選擇使用 Avro 或 Protobuf,那么實際問題是如何將 json 數據轉換為 Avro 或 Protobuf python object,這又不是 Kafka 特定的。 完成該步驟后,可以使用與上述相同的模式,將jsonserializer替換為 Avro 或 Protobuf 的模式。

請注意,手動制作架構而不是使用生成器通常是一個更好的主意,並仔細考慮什么是可選的,什么應該是聯合類型......因為您希望在尊重架構的同時保持將來更新它的能力注冊表兼容性規則,以及自動生成的模式可能限制性太強或無法適應未來。 此外,您還需要考慮一些技術限制,例如 Protobuf 3 無法區分缺失值和默認值,因此您可能會決定使用包裝器等。

答案是不。 我有一個類似的問題,主要挑戰是生成鍵和值模式。

解決方案是創建一個應用程序來創建 json 和 Kafka 模式之間的自定義映射

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM