[英]Is it possible to access message headers with Kafka Streams?
由於增加了頭的記錄( ProducerRecord & ConsumerRecord )在卡夫卡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.