web-dev-qa-db-fra.com

Est-il possible d'accéder aux en-têtes de message avec Kafka Streams?

Avec l'ajout de En-têtes aux enregistrements ( ProducerRecord & ConsumerRecord ) dans Kafka 0.11, est-il possible pour obtenir ces en-têtes lors du traitement d'un sujet avec Kafka Streams? Lors de l'appel de méthodes comme map sur un KStream, il fournit des arguments de key et le value de l'enregistrement mais aucun moyen que je puisse voir pour accéder au headers. Ce serait bien si nous pouvions simplement map sur les ConsumerRecords.

ex.

KStreamBuilder kStreamBuilder = new KStreamBuilder();
KStream<String, String> stream = kStreamBuilder.stream("some-topic");
stream
    .map((key, value) ->  ... ) // can I get access to headers in methods like map, filter, aggregate, etc?
    ... 

quelque chose comme ça fonctionnerait:

KStreamBuilder kStreamBuilder = new KStreamBuilder();
KStream<String, String> stream = kStreamBuilder.stream("some-topic");
stream
    .map((record) -> {
        record.headers();
        record.key();
        record.value();
    })
    ...
14
Nathan Myles

Les en-têtes d'enregistrements sont accessibles depuis les versions 2.0 de l'API Streams. (Cf. KIP-244 pour plus de détails.)

Vous pouvez accéder aux métadonnées d'enregistrement via l'API du processeur (c'est-à-dire via transform(), transformValues() ou process()), par l'objet "contexte" donné (cf. - https://docs.confluent.io/current/streams/developer-guide/processor-api.html#accessing-processor-context ).

Avant la version 2.0, le contexte expose uniquement la rubrique, la partition, l'offset et l'horodatage --- mais pas les en-têtes qui sont en fait supprimés par Streams en lecture dans ces anciennes versions.

Cependant, les métadonnées ne sont pas disponibles au niveau DSL. Cependant, des travaux sont également en cours pour étendre la DSL: https://cwiki.Apache.org/confluence/display/KAFKA/KIP-159%3A+Introducing+Rich+functions+to+Streams =

14
Matthias J. Sax