[英]Kafka KStream-KStream leftjoin windowed with custom TimestampExtractor cause Skipping record for expired segment
[英]KStream leftJoin KStream with the same Key
我有問題 taht 我嘗試 leftjoin 2 Streams。 mergedKey 有 100 多個具有相同鍵的列表,而 DataStream 只有 1 個具有與 mergeKey 相同的鍵的列表。 我想在來自mergedKey 的endStream Value 與DataStream 合並。
//get DataStream
final KStream<String, GenericRecord> DataStream = builder.stream("Datastreams");
// Transform merged to Equals Keys to DataStream.Iot
final KStream<String, GenericRecord> mergedKey = mergedFoIObs
.map((key, value) -> KeyValue.pair(value.get("Datastream").toString(), value));
// Join the DataStream with MergedStream
final KStream<String, String> mergedFoIObsData = mergedKey.leftJoin(
DataStream,
(value, data) -> {
try {
if(data != null{
value.put("Datastream", data.toString());
JSONObject jo = (JSONObject) new JSONParser().parse(value.toString());
return jo.toJSONString();}
return null
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}, JoinWindows.of(10000));
但我的問題是,在 Endstream 中,我只得到 1 個具有正確值的列表,而其他列表的值為 null。
Taht 意味着數據在第一輪“回合”之后為空。
當我從 DataStream 轉換到 KTable 時,我遇到了問題,我得到了正確的列表,但只有 37 個列表,所以 60 個丟失。
我希望你能幫助我。
對於 KStream-KStream 加入,取決於記錄的時間戳是否加入。 查看此博客文章了解更多詳細信息: https : //www.confluent.io/blog/crossing-streams-joins-apache-kafka/
對於 KStream-KTable 連接,這取決於何時將 KTable 記錄加載到 KTable 中——Kafka Streams 嘗試根據時間戳同步加載,但這是一種盡力而為的方法。 因此,可能會先處理一些 KStream 記錄,而 KTable 仍然是空的。 只有在KTable記錄被處理后(即KTable更新並包含該記錄),連續的KStream記錄才會成功加入。
請注意,下一個 Kafka 版本 2.1 將改進這種時間戳同步並提供更強的保證,用戶甚至可以配置保證的嚴格程度。
“此外,對於不滿足連接謂詞的此 KStream 的每個輸入記錄,將使用另一個流的空值調用提供的 ValueJoiner。”
所以當數據(右值)為空時你不應該返回空值,你應該返回值(左值)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.