[ 
https://issues.apache.org/jira/browse/BEAM-13854?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17489077#comment-17489077
 ] 

Matt Casters commented on BEAM-13854:
-------------------------------------

That would obviously be even better.  I'm not sure if any existing code would 
break.  My guess is it wouldn't since you need to erase the type anyway to the 
method work. 

> 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
>            Priority: P3
>             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