Envoie des Objets Java à Kafka Sujet
J'ai mon personnalisée Objet Java et qui souhaitent tirer parti de la JVM est construit dans la sérialisation de l'envoyer à un Kafka sujet, mais la sérialisation échoue avec l'erreur ci-dessous
org.apache.kafka.commun.erreurs.SerializationException: impossible de convertir le
la valeur de la classe com.printemps.kafka.La charge utile de la classe
org.apache.kafka.commun.la sérialisation.ByteArraySerializer spécifié dans
de la valeur.sérialiseur
Payload.java
public class Payload implements Serializable {
private static final long serialVersionUID = 123L;
private String name="vinod";
private int anInt = 5;
private Double aDouble = new Double("5.0");
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAnInt() {
return anInt;
}
public void setAnInt(int anInt) {
this.anInt = anInt;
}
public Double getaDouble() {
return aDouble;
}
public void setaDouble(Double aDouble) {
this.aDouble = aDouble;
}
}
Lors de ma création de producteur, j'ai les propriétés suivantes définies
<entry key="key.serializer"
value="org.apache.kafka.common.serialization.ByteArraySerializer" />
<entry key="value.serializer"
value="org.apache.kafka.common.serialization.ByteArraySerializer" />
Mon envoyer invoke est comme ci-dessous
kafkaProducer.send(new ProducerRecord<String, Payload>("test", new Payload()));
Ce qui est correct pour envoyer une coutume objet java, par l'intermédiaire d'un producteur à un kafka sujet ?
OriginalL'auteur Vinod Jayachandran | 2016-12-14
Vous devez vous connecter pour publier un commentaire.
Nous avons 2 Options comme indiqué ci-dessous
1) Si nous avons l'intention d'envoyer personnalisé des objets java de producteur, Nous avons besoin de créer un processus qui met en œuvre org.apache.kafka.commun.la sérialisation.Sérialiseur et passer Sérialiseur de la classe lors de la création de votre producteur
Code de Référence ci-dessous
Et définir la valeur de sérialiseur en conséquence
2) Pas besoin d'en créer des personnalisés sérialiseur de classe. Utiliser le ByteArraySerializer, mais au cours de l'envoyer suivre le processus
OriginalL'auteur Vinod Jayachandran
Puisque vous utilisez
ByteArraySerializer
,vous devez instancier un byte[] producteur.et puis, tout en produisant passer le byte[] après la sérialisation ou une autre méthode,par exemple,
Si vous êtes de passage juste une Charge utile de l'Objet, pour le producteur, alors il sera mieux pour avoir la clé sérialiseur et la valeur sérialiseur que ce que vous avez l'intention de passer et pendant la lecture, vous devez lire à partir de ces données.
Il est de bonne pratique d'utiliser Serializable et ByteArraySerializer/ByteArrayDeserializer.
OriginalL'auteur Abhishek Kumar