Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以使用Kafka流访问消息头?_Java_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Java 是否可以使用Kafka流访问消息头?

Java 是否可以使用Kafka流访问消息头?,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,在Kafka 0.11中添加了记录(&),在处理带有Kafka流的主题时是否可以获取这些标题?在KStream上调用map等方法时,它提供了键的参数和记录的值,但我无法访问标题。如果我们能在消费者记录上绘制地图就好了 前 KStreamBuilder KStreamBuilder=new KStreamBuilder(); KStream stream=kStreamBuilder.stream(“某个主题”); 流动 .map((key,value)->…)//我可以访问map、filter、

在Kafka 0.11中添加了记录(&),在处理带有Kafka流的主题时是否可以获取这些标题?在
KStream
上调用
map
等方法时,它提供了
键的参数
和记录的
,但我无法访问
标题
。如果我们能在
消费者记录上绘制
地图就好了

KStreamBuilder KStreamBuilder=new KStreamBuilder();
KStream stream=kStreamBuilder.stream(“某个主题”);
流动
.map((key,value)->…)//我可以访问map、filter、aggregate等方法中的头吗?
... 
类似这样的方法会奏效:

KStreamBuilder kStreamBuilder = new KStreamBuilder();
KStream<String, String> stream = kStreamBuilder.stream("some-topic");
stream
    .map((record) -> {
        record.headers();
        record.key();
        record.value();
    })
    ...
KStreamBuilder KStreamBuilder=new KStreamBuilder();
KStream stream=kStreamBuilder.stream(“某个主题”);
流动
.map((记录)->{
record.headers();
record.key();
record.value();
})
...

从2.0.0版开始,记录标题就可以访问(有关详细信息,请参阅)

您可以通过给定的“上下文”对象通过处理器API(即通过
transform()
transformValues()
、或
process()
)访问记录元数据(参见)

更新

从2.7.0版本开始,处理器API得到了改进(参见),添加了一种新型的安全
API。处理器
类使用
process(Record)
而不是
process(K,V)
方法。对于这种情况,可以通过
record
类)访问标题(和记录元数据)

这项新功能在DSL的“PAPI方法”(例如,
KStream#process()
KStream#transform()
和兄弟)中尚不可用

+++++

在2.0之前,上下文只公开主题、分区、偏移量和时间戳,而不公开在旧版本中实际上由流在读取时丢弃的头


虽然DSL级别没有元数据。但是,通过扩展DSL的工作也在进行中。

澄清Matthias所说的:是的,Kafka Streams中的处理器API允许您访问记录元数据,如主题名、分区号、偏移量等。Kafka Streams中的DSL不允许您访问。但是,因为您可以结合处理器API和DSL,您仍然可以编写基于DSL的流处理应用程序,通过使用DSL的
transform()
transformValues()访问记录元数据
函数,它允许您从处理器API传入处理器/转换器。感谢各位提供的信息,我会留意元数据何时添加到DSL级别,以便更新此答案。@MatthiasJ.Sax和@MichaelG.Noll:in,对于
RecordContext
提案,它似乎没有标题这是要添加的吗?没有计划通过KIP-159扩展{{{RecordContext}}当我们添加头支持时,这看起来是TDB,但我假设我们会向{{RecordContext}添加新方法对于这一点。如果您对细节感兴趣,Jira会做什么:)@MatthiasJ.Sax对我来说仍然不是100%清楚:这是否意味着通过Streams 1.0.1,既不能通过DSL也不能通过处理器API访问消息头?我通过检查ProcessorContext()来问,我无法找到当前处理的消息头。
KStreamBuilder kStreamBuilder = new KStreamBuilder();
KStream<String, String> stream = kStreamBuilder.stream("some-topic");
stream
    .map((record) -> {
        record.headers();
        record.key();
        record.value();
    })
    ...