Uploaded image for project: 'Kafka'
  1. Kafka
  2. KAFKA-3910

Cyclic schema support in ConnectSchema and SchemaBuilder

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 0.10.0.0
    • None
    • connect
    • None

    Description

      Cyclic schema's are not supported by ConnectSchema or SchemaBuilder. Subsequently the AvroConverter (confluentinc/schema-registry) hits a stack overflow when converting a cyclic avro schema, e.g:

      {"type":"record", "name":"list","fields":[{"name":"value","type":"int"},{"name":"next","type":["null","list"]}]}
      

      This is a blocking issue for all connectors running on the connect framework with data containing cyclic references. The AvroConverter cannot support cyclic schema's until the underlying ConnectSchema and SchemaBuilder do.

      To reproduce the stack-overflow (Confluent-3.0.0):

      Produce some cyclic data:

      bin/kafka-avro-console-producer --broker-list localhost:9092 --topic test --property value.schema='{"type":"record", "name":"list","fields":[{"name":"value","type":"int"},{"name":"next","type":["null","list"]}]}'
      {"value":1,"next":null} 
      {"value":1,"next":{"list":{"value":2,"next":null}}}
      

      Then try to consume it with connect:

      connect-console-sink.properties
      name=local-console-sink 
      connector.class=org.apache.kafka.connect.file.FileStreamSinkConnector 
      tasks.max=1 
      topics=test
      
      ./bin/connect-standalone ./etc/schema-registry/connect-avro-standalone.properties connect-console-sink.properties  
      … start up logging … 
      java.lang.StackOverflowError 
       at org.apache.avro.JsonProperties.getJsonProp(JsonProperties.java:54) 
       at org.apache.avro.JsonProperties.getProp(JsonProperties.java:45) 
       at io.confluent.connect.avro.AvroData.toConnectSchema(AvroData.java:1055) 
       at io.confluent.connect.avro.AvroData.toConnectSchema(AvroData.java:1103) 
       at io.confluent.connect.avro.AvroData.toConnectSchema(AvroData.java:1137) 
       at io.confluent.connect.avro.AvroData.toConnectSchema(AvroData.java:1103) 
       at io.confluent.connect.avro.AvroData.toConnectSchema(AvroData.java:1137)
      

      Attachments

        Activity

          People

            ChrisEgerton Chris Egerton
            johnhofman John Hofman
            Votes:
            2 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

              Created:
              Updated: