[英]Finding min/max values in a KafkaStream (KStream) object
對於每個主題和密鑰,我都有一個 Kafka Stream 應用程序和 Avro 模式。 關鍵主題模式對所有人都是相同的。
現在,有一個 KafkaStream (KStream) 對象,其中已知鍵對象作為鍵和一個值對象(派生自 AvroSchema)擴展了org.apache.avro.specific.SpecificRecordBase
但它可能是我的任何 avro 模式主題內容。
KStream<CustomKey, ? extends SpecificRecordBase> myStream =...
我想要實現的是在此流上運行最小和最大函數。 問題是我不知道什么是?
對象,並且由於有 30 多個(並且將來會增加)主題,我不想做一個切換案例。 所以我有以下內容:
public KStream<CustomKey, ? extends SpecificRecordBase> max(
final KStream<CustomKey, ? extends SpecificRecordBase> myStream,
final String attributeName) {
SpecificRecordBase maxValue = ...;
myStream.foreach((key, value) -> {
value.get(attributeName) // I want to find the max value for this attribute,
// but at this point we don't know it's type and
// and we can't assign maxValue = value, because this is a lambda
// function.
});
// find and return the max value
}
我的問題是,如何計算attributeName
屬性上myStream
的最大值?
它可以是我的主題內容的任何 avro 模式
然后你需要extends ClassWithMinMaxFields
。 否則,您將無法從通用SpecificRecordBase
對象中提取它。
此外,您的方法返回一個流。 您不能return
最小值/最大值。 如果那是你的目標,你需要一個普通的消費者來瀏覽整個主題,從頭到尾(最終)。
要使用 Streams API(正確地)執行此操作,您可以
aggregate
DSL 函數創建一個新主題,用{"min": +Inf, "max": -Inf}
,然后在新記錄上檢查舊記錄與新記錄,如果有新的最小值和/或最大值,請設置他們並返回新記錄。 然后,您仍然需要一個外部消費者來獲取最近的最小/最大事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.