所以我正在评估Kafka Streams,以及如何做才能查看它是否适合我的用例,因为我需要每小时,每天,每天15分钟汇总传感器数据,并发现它具有窗口功能,因此很有用。
因为我可以通过在windowedBy()
上应用KGroupedStream
来创建窗口,但是问题是窗口是在UTC中创建的,我希望我的数据按其原始时区而不是UTC时区进行分组,因为这样会妨碍聚合,因此谁能帮我这个忙。
答案 0 :(得分:1)
您可以使用自定义TimestampExtractor
“移动”时间戳-在将结果写回到输出主题之前,您可以使用Transformer
并通过{{”移动“时间戳” 1}}。
答案 1 :(得分:0)
因此,为了解决此问题,我创建了自定义TimestampExtractor
,并使用它来更改流窗口创建时间以记录有效负载中的时间,如下所示。
public class RecordTimeStampExtractor implements TimestampExtractor {
@Override
public long extract(ConsumerRecord<Object, Object> record, long previousTimestamp) {
JsonObject data = (JsonObject) new JsonParser().parse(record.value().toString());
Timestamp recordTimestamp = Timestamp.valueOf(data.get(Constant.SLOT).getAsString());
return recordTimestamp.getTime();
}
}
因此,现在我从昨天起就是IST 05:30,已经在我的本地时区进行了测试,并且它的正常运行以及kafka流正在基于记录时间戳创建窗口。还将与其他时区进行测试并更新答案