2015-02-27 8 views
9

Ich Einrichtung Kafka Hersteller ihre neuen KafkaProducer API und folgende Fehler bekommenStandard Serializer für kafka 0.8.2.0

Exception in thread "main" org.apache.kafka.common.config.ConfigException: Missing required configuration "key.serializer" which has no default value. 
at org.apache.kafka.common.config.ConfigDef.parse(ConfigDef.java:124) 
at org.apache.kafka.common.config.AbstractConfig.<init>(AbstractConfig.java:48) 
at org.apache.kafka.clients.producer.ProducerConfig.<init>(ProducerConfig.java:235) 
at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:129) 
at com.kafka.producer.App.KafkaProducer(App.java:43) 
at com.kafka.producer.App.main(App.java:33) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:483) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) 

Es scheint http://kafka.apache.org/documentation.html#newproducerconfigs kein Standard Serializer und die Dokumentation zu sein, und ich sehe nicht möglich Werte.

Diese Frage ist für Kafka Version 0.8.2.0

+0

könnten Sie bitte den Erzeugercode teilen? – user2720864

Antwort

24

Die früheren Versionen von Kafka kam mit Standard Serialisierer, aber das verursachte viel Verwirrung.

Mit 0.8.2, müssten Sie einen Serializer selbst aus StringSerializer oder ByteArraySerializer, die mit API kommt oder wählen Sie selbst erstellen. http://kafka.apache.org/082/javadoc/org/apache/kafka/common/serialization/StringSerializer.html ByteArraySerializer: http://kafka.apache.org/082/javadoc/org/apache/kafka/common/serialization/ByteArraySerializer.html

So würde Ihre Lösung sein, eine der folgenden Optionen zu verwenden, wenn Sie Standard-Serializer verwenden suchen

Die API Serializer können StringSerializer finden.

props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); 

oder

props.put("key.serializer", "org.apache.kafka.common.serialization.ByteArraySerializer"); 
7

Unter der Annahme, dass Sie eine StringSerializer, verwenden wollen:

 
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName()); 
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName()); 

vollständiges Beispiel hier: https://github.com/CameronGregory/kafka/blob/master/TestProducer.java

+0

Ich mag diese Lösung, da sie nicht auf Strings, sondern auf echte Klassen/Werte bezogen ist, also selbst wenn sich etwas ändert, wird es funktionieren! –

+0

was ist, möchten wir Integer als Wert senden. Wie sollte ich den Serializer hier benutzen !! – Abhi

+0

Ab 0.9 gibt es einen [IntegerSerializer] (https://kafka.apache.org/0102/javadoc/org/apache/kafka/common/serialization/IntegerSerializer.html). –

Verwandte Themen