为了避免在杀死KAFKA STREAMS时读取已处理但未提交的消息,我想获取每条消息的偏移量以及键和值,以便我可以将其存储在某处并使用它避免重新处理已处理的消息。
答案 0 :(得分:2)
是的,这是可能的。请参阅http://docs.confluent.io/current/streams/faq.html#accessing-record-metadata-such-as-topic-partition-and-offset-information上的常见问题解答条目。
我将复制粘贴以下关键信息:
访问主题,分区和偏移信息等记录元数据?
可以通过Processor API访问记录元数据。 它也可以通过DSL间接访问它 Processor API integration
使用Processor API,您可以通过a访问记录元数据
ProcessorContext
。您可以在上下文中存储对上下文的引用 在Processor#init()
期间处理器的实例字段,然后 例如,查询Processor#process()
内的处理器上下文 (Transformer
)相同。上下文会自动更新以匹配 当前正在处理的记录,表示方法 例如ProcessorContext#partition()
总是返回当前值 记录的元数据。调用处理器时会出现一些警告punctuate()
中的上下文,有关详细信息,请参阅Javadoc。例如,如果您将DSL与自定义
Transformer
结合使用, 您可以将输入记录的值转换为也包括分区 和偏移元数据,以及后续的DSL操作,如map
或 然后filter
可以利用这些信息。