2016-05-28 12 views
2

は私がスレッド "メイン" org.apache.kafka.common.errors.SerializationExceptionにApacheのカフカ送信するJavaオブジェクトは、

例外を取得しています

 HashMap message = new HashMap(); 
     message.put("x", "xxxxx"); 
     message.put("y", "yyyyy"); 
     message.put("z", 100); 

     ProducerRecord producerRecord = new ProducerRecord(topic, message); 
     producer.send(producerRecord); 

このオブジェクトを持って失敗しました:することができませんクラスjava.util.HashMapをの値は、あなたがどのような方法でカフカを提供する必要がvalue.serializer

答えて

3

で指定されたクラスorg.apache.kafka.common.serialization.StringSerializerに変換しますこの場合はHashMapというメッセージをバイナリ形式に変換します。 Kafka documentationから:

key.serializerとvalue.serializerは、キーと値をオンにする方法を指示し、ユーザーがバイトに彼らのProducerRecordで提供してオブジェクト。単純な文字列型またはバイト型に対しては、付属のByteArraySerializerまたはStringSerializerを使用できます。

使い方の例:

Properties props = new Properties(); 
props.put("key.serializer", "YourImplementation"); 
props.put("value.serializer", "YourImplementation"); 

Producer<String, HashMap> producer = new KafkaProducer<>(props); 
+0

簡単な例がいいです – manish

+0

私はエラーを取得します。org.apache.kafka.common.errors.SerializationException:クラスjava.util.HashMapの値をクラスorg.apache.kafka.commonに変換できません。 value.serializerで指定されたserialization.ByteArraySerializer – Sankalp

0

あなたはJSONにHashMapを変換し、

private void configureProducer() { 
    Properties props = new Properties(); 
    props.put("key.serializer", StringSerializer.class.getName()); 
    props.put("value.serializer", JsonSerializer.class.getName()); 
    producer = new KafkaProducer<String, String>(props); 
} 

か、またByteArraySerializerを使用することができるようJsonSerializerを使用することができます。参照してくださいthis

関連する問題