Kafka 0.9 requires that the "key.serializer" and "value.serializer" items in
ProducerConfig be java classes, not a string containing the name of a java
class.
See
https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/producer/ProducerConfig.java#L280-L287
However, if try to do that like this:
Properties props = new Properties();props.put("bootstrap.servers",
topoProperties.getProperty("bootstrap.servers"));
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
io.confluent.kafka.serializers.KafkaAvroSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
io.confluent.kafka.serializers.KafkaAvroSerializer.class);
conf.put(KafkaBolt.KAFKA_BROKER_PROPERTIES, props);
Storm fails to start with this error:
java.lang.IllegalArgumentException: Topology conf is not json-serializable
See:
https://github.com/apache/storm/blob/master/storm-core/src/jvm/org/apache/storm/StormSubmitter.java#L192-L194
Seems like kafka-bolt's prepare method will have to transform a string into a
Java class. Before I go down that path, I was wondering if anyone else had run
into this problem and if there's a workaround?
Thanks! -Aaron