Matt Casters created BEAM-13854:
-----------------------------------

             Summary: Document casting trick for Avro value serializer in 
KafkaIO
                 Key: BEAM-13854
                 URL: https://issues.apache.org/jira/browse/BEAM-13854
             Project: Beam
          Issue Type: Improvement
          Components: io-java-kafka
    Affects Versions: 2.36.0
            Reporter: Matt Casters
             Fix For: 2.37.0


Consider we want to write Avro values to Kafka with for example the following 
code:
{code:java}
KafkaIO.Write<String, GenericRecord> stringsToKafka =
 KafkaIO.<String, GenericRecord>write()
  .withBootstrapServers(bootstrapServers)
  .withTopic(topic)
  .withKeySerializer(StringSerializer.class)
  .withValueSerializer(KafkaAvroSerializer.class)
  .withProducerConfigUpdates(producerConfigUpdates);{code}
 The KafkaAvroSerializer.class argument can't be passed as would normally be 
the case in Producer option: 
value.serializer=io.confluent.kafka.serializers.KafkaAvroSerializer



So the question then is which class should we pass or how to cast. IntelliJ 
IDEA suggests a cast which doesn't compile.

In the end the answer is simply:
{code:java}
  .withValueSerializer((Class)KafkaAvroSerializer.class) {code}
I think it's worth documenting this little trick more clearly in the Javadoc of 
KafkaIO to prevent others from bumping into the same issue. 



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to