在Kafka 0.11中向记录(Headers& ProducerRecord)添加ConsumerRecord后,是否可以在使用Kafka Streams处理主题时获取这些标题?在map
上调用KStream
之类的方法时,它会提供记录的key
和value
的参数,但我无法访问headers
。如果我们只能在map
上ConsumerRecord
,那就太好了。
离。
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();
})
...
答案 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