Kafka: la rédaction de la coutume de sérialiseur
Je suis en train de construire un POC avec Kafka 0.8.1. Je suis en utilisant ma propre classe java comme Kafka message qui a un tas de types de données Chaîne. Je ne peux pas utiliser la valeur par défaut sérialiseur de la classe ou de la Chaîne sérialiseur de classe qui vient avec Kafka de la bibliothèque. Je suppose que j'ai besoin d'écrire mon propre sérialiseur et le nourrir pour le producteur propriétés.
Si vous êtes conscient de l'écriture d'un exemple personnalisé sérialiseur Kafka (en java), merci de le faire partager.
Apprécie beaucoup, merci beaucoup.
- En fait il est de coutume de Codeur pour kafkaMessage
- Est-il possible d'exécuter un Kafka application sur i7 ?
Vous devez vous connecter pour publier un commentaire.
Les choses nécessaires à l'écriture d'une coutume sérialiseur sont:
Encoder
avec un objet spécifié pour le génériqueVerifiableProperties
constructeur est tenutoBytes(...)
méthode en s'assurant qu'un tableau d'octets est retournéProducerConfig
Déclarant une coutume sérialiseur pour un producteur
Comme vous l'avez mentionné dans votre question, Kafka fournit un moyen de déclarer un spécifique sérialiseur pour un producteur. Le sérialiseur classe est définie dans un
ProducerConfig
instance et que cette instance est utilisé pour construire l'souhaitéProducer
classe.Si vous suivez Kafka Producteur Exemple vous permettra de construire des
ProducerConfig
via unProperties
objet. Lors de la construction de votre fichier de propriétés, assurez-vous d'inclure:Avec le chemin d'accès à la classe que vous souhaitez Kafka à utiliser pour sérialiser les messages avant de les ajoutant dans le journal.
Créer un sérialiseur que Kafka comprend
Écrit une coutume sérialiseur que Kafka pouvoir interpréter correctement nécessite la mise en œuvre de la
Encoder[T]
scala classe que Kafka fournit. La mise en œuvre des traits dans le langage java est bizarre, mais la méthode suivante travaillé pour la sérialisation JSON dans mon projet:Votre question nous donne l'impression que vous êtes en utilisant un objet (appelons cela
CustomMessage
) pour tous les messages ajoutés à votre journal. Si c'est le cas, votre sérialiseur pourrait ressembler à ceci:Qui risquerait de laisser votre propriété config ressemble à ceci:
ObjectMapper
est un poids lourd de l'opération, et depuis ils sont thread-safe, après la construction, il est logique de créer un statique de la dernière instance de pour codeur/décodeur. Sinon, la construction prendra 10x plus que le réel de la lecture/écriture.ObjectMapper
, mais comme vous l'avez dit, pour cet exemple montre qu'une seule instanciation est une amélioration.Vous avez besoin pour mettre en œuvre la fois d'encoder et de decoder
Le décodeur de code
La pom entrée
Définir la valeur par défaut du codeur dans le Kafka de la propriété
L'écrivain et le lecteur de code est comme suit