Как я могу генерировать данные для десятичного поля (байтов) с помощью kafka-connect-datagen?

#apache-kafka #avro #kafka-connect-datagen #avro-random-generator

Вопрос:

У меня возникли проблемы с вводом правильных данных в десятичное поле ( type=bytes с логическим типом=»десятичное») при использовании kafka-connect-datagen .

Я пытаюсь настроить a kafka-connect-datagen для генерации данных в теме, которая обычно заполняется a kafka-connect-jdbc -коннектором. Я хочу настроить это для того, чтобы генерировать тестовые данные локально.

Десятичное поле в моей «теме-схеме» автоматически генерируется kafka-connect-jdbc и определяется как:

 {
  "name": "TRANSACTION_AMOUNT",
  "type": [
    "null",
    {
      "type": "bytes",
      "scale": 2,
      "precision": 15,
      "connect.version": 1,
      "connect.parameters": {
        "scale": "2",
        "connect.decimal.precision": "15"
      },
      "connect.name": "org.apache.kafka.connect.data.Decimal",
      "logicalType": "decimal"
    }
  ],
  "default": null
},
 

В avro-random-generator -schema ( datagen-schema.json ) определено следующее поле для TRANSACTION_AMOUNT:

 {
  "name": "TRANSACTION_AMOUNT",
  "type": {
    "type": "bytes",
    "arg.properties": {
      "options": [
        "10.00"
      ]
    }
  }
},
 

Запуск этого в kafka-connect со следующей kafka-connect-datagen конфигурацией:

 {
  "name": "datagen",
  "config": {
    "connector.class": "io.confluent.kafka.connect.datagen.DatagenConnector",
    "kafka.topic": "transaction.events",
    "schema.filename": "/path/to/datagen-schema.json",
    "schema.keyfield": "PERSON_ID",
    "key.converter": "org.apache.kafka.connect.storage.StringConverter",
    "value.converter": "io.confluent.connect.avro.AvroConverter",
    "value.converter.schema.registry.url": "http://schema-registry:8081",
    "value.converter.auto.register.schemas": "false",
    "value.converter.use.latest.version": "true",
    "value.converter.schemas.enable": "false",
    "max.interval": 1000,
    "iterations": 10000000,
    "tasks.max": "1"
  }
}
 

This results in the following data:

 "TRANSACTION_AMOUNT" : "2112617308.64",
 

I suspect there are some encoding happening here which I am not aware of.

Base64

В документации по avro-генератору случайных чисел запись параметров закодирована в кодировке base64 («NDI=» -> «42»). Если я изменю поле options-на версию «10.00» в кодировке base64 (то есть MTAuMDA= ), оно все равно не будет работать (я получаю 55721506110274440.29 ).

ARG CLI

Генератор случайных чисел avro поставляется с интерфейсом командной строки, который можно использовать для создания данных из схемы. При использовании этого в моей схеме я получаю правильную запись параметров, и ни одна из зашифрованных версий, которые я получаю по этой теме.