簡體   English   中英

是否可以使用 Kafka Streams 訪問消息頭?

[英]Is it possible to access message headers with Kafka Streams?

由於增加了的記錄( ProducerRecordConsumerRecord )在卡夫卡0.11,是有可能處理與卡夫卡流的話題時,得到這些標題? KStream上調用map等方法時,它提供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();
    })
    ...

從版本 2.0.0 開始可以訪問記錄標頭(參見KIP-244了解詳細信息)。

您可以通過處理器 API(即,通過transform()transformValues()process() )通過給定的“上下文”對象訪問記錄元數據(參見https://docs.confluent.io/current/streams /developer-guide/processor-api.html#accessing-processor-context )。

更新

從 2.7.0 版本開始,處理器 API 得到了改進(參見KIP-478 ),添加了一個新的類型安全api.Processor類,使用process(Record)而不是process(K, V)方法。 對於這種情況,可以通過Record類訪問標頭(和記錄元數據)。

這個新特性在 DSL 的“PAPI 方法”中尚不可用(例如KStream#process()KStream#transform()和兄弟)。

+++++

在 2.0 之前,上下文僅公開主題、分區、偏移量和時間戳——但不公開那些在舊版本中讀取時實際上由 Streams 丟棄的標頭。

但是元數據在 DSL 級別不可用。 然而,通過KIP-159擴展 DSL 的工作也在進行中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM