func (this *CachedSchemaRegistryClient) GetByID(id int32) (avro.Schema, error) { var schema avro.Schema var exists bool if schema, exists = this.idCache[id]; exists { return schema, nil } request, err := this.newDefaultRequest("GET", fmt.Sprintf(GET_SCHEMA_BY_ID, id), nil) if err != nil { return nil, err } response, err := http.DefaultClient.Do(request) if err != nil { return nil, err } if this.isOK(response) { decodedResponse := &GetSchemaResponse{} if this.handleSuccess(response, decodedResponse) != nil { return nil, err } schema, err := avro.ParseSchema(decodedResponse.Schema) this.idCache[id] = schema return schema, err } else { return nil, this.handleError(response) } }
func createPrimitiveSchema(schemaType string) avro.Schema { schema, err := avro.ParseSchema(fmt.Sprintf(`{"type" : "%s" }`, schemaType)) if err != nil { panic(err) } return schema }
func NewKafkaAvroAdapter(route *router.Route) (router.LogAdapter, error) { brokers := readBrokers(route.Address) if len(brokers) == 0 { return nil, errorf("The Kafka broker host:port is missing. Did you specify it as a route address?") } topic := readTopic(route.Address, route.Options) if topic == "" { return nil, errorf("The Kafka topic is missing. Did you specify it as a route option?") } schemaUrl := readSchemaRegistryUrl(route.Options) if schemaUrl == "" { return nil, errorf("The schema registry url is missing. Did you specify it as a route option?") } registry := kafkaavro.NewKafkaAvroEncoder(schemaUrl) var schema avro.Schema schema, err := avro.ParseSchema(messageSchema) if err != nil { return nil, errorf("The schema could not be parsed") } if os.Getenv("DEBUG") != "" { log.Printf("Starting Kafka producer for address: %s, topic: %s.\n", brokers, topic) } var retries int retries, err = strconv.Atoi(os.Getenv("KAFKA_CONNECT_RETRIES")) if err != nil { retries = 3 } var producer sarama.AsyncProducer for i := 0; i < retries; i++ { producer, err = sarama.NewAsyncProducer(brokers, newConfig()) if err != nil { if os.Getenv("DEBUG") != "" { log.Println("Couldn't create Kafka producer. Retrying...", err) } if i == retries-1 { return nil, errorf("Couldn't create Kafka producer. %v", err) } } else { time.Sleep(1 * time.Second) } } return &KafkaAvroAdapter{ route: route, brokers: brokers, topic: topic, registry: registry, schema: schema, producer: producer, }, nil }
func TestSchemaRegistry(t *testing.T) { client := NewCachedSchemaRegistryClient("http://localhost:8081") rawSchema := "{\"namespace\": \"ly.stealth.kafka.metrics\",\"type\": \"record\",\"name\": \"Timings\",\"fields\": [{\"name\": \"id\", \"type\": \"long\"},{\"name\": \"timings\", \"type\": {\"type\":\"array\", \"items\": \"long\"} }]}" schema, err := avro.ParseSchema(rawSchema) assert(t, err, nil) id, err := client.Register("test1", schema) assert(t, err, nil) assertNot(t, id, 0) schema, err = client.GetByID(id) assert(t, err, nil) assertNot(t, schema, nil) metadata, err := client.GetLatestSchemaMetadata("test1") assert(t, err, nil) assertNot(t, metadata, nil) version, err := client.GetVersion("test1", schema) assert(t, err, nil) assertNot(t, version, 0) }