是否可以使用Kafka Streams访问邮件头?

时间:2017-10-13 19:02:23

标签: java apache-kafka apache-kafka-streams

在Kafka 0.11中向记录(Headers& ProducerRecord)添加ConsumerRecord后,是否可以在使用Kafka Streams处理主题时获取这些标题?在map上调用KStream之类的方法时,它会提供记录的keyvalue的参数,但我无法访问headers 。如果我们只能在mapConsumerRecord,那就太好了。

离。

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?
    ... 

这样的事情会起作用:

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

1 个答案:

答案 0 :(得分:11)

自Streams API的2.0版以来,可以访问记录标题。 (参见KIP-244了解详情。)

您可以通过处理器API(即transform()transformValues()process())通过给定的“上下文”对象访问记录元数据(参见https://docs.confluent.io/current/streams/developer-guide/processor-api.html#accessing-processor-context )。

在2.0之前,上下文只公开了主题,分区,偏移量和时间戳---但实际上并没有在这些旧版本中读取时被Streams删除的标题。

但是,DSL级别的元数据不可用。但是,正在进行扩展DSL的工作:https://cwiki.apache.org/confluence/display/KAFKA/KIP-159%3A+Introducing+Rich+functions+to+Streams