我有一个Kafka Streams应用程序(V 2.1.1),该应用程序生成记录并以键值格式放入输出主题。
键是窗口时间序列,我希望在其中输入键和窗口开始/结束时间的句柄。
示例-
.to(kafkaOutPutTopic, Produced.with(windowedSerde, jsonSerde));
示例-[KEY @ 1551807076000/1551807077000] 其中KEY为键,开始时间-1551807076000和结束时间-1551807077000
WindowedSerde在哪里
StringSerializer stringSerializer = new StringSerializer();
final TimeWindowedSerializer<String> windowedSerializer = new TimeWindowedSerializer(stringSerializer);
final TimeWindowedDeserializer<String> windowedDeSerializer = new TimeWindowedDeserializer();
final Serde<Windowed<String>> windowedSerde = Serdes.serdeFrom(windowedSerializer, windowedDeSerializer);
还有一个名为kafka的组件,它通过使用自定义类的DeSerializering尝试消耗主题中的消息并掌握键和窗口的开始/结束时间。
kafka属性:
kafkaConsumerProperties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, TimeWindowedDeserializer.class.getName());
我正在使用附加链接-https://gist.github.com/nfo/eaf350afb5667a3516593da4d48e757a
中的TimeWindowedDeserializer.java但是可以获取窗口结束时间,并且由于反序列化,使用者无法使用它。
答案 0 :(得分:0)
似乎您正在击中https://issues.apache.org/jira/browse/KAFKA-7110
在2.2.0中已修复,可以将窗口大小传递给构造函数或TimeWindows
。
请注意,窗口结束时间戳和窗口大小均未存储在数据中。这是一项存储优化,因为对于TimeWindows
,所有窗口的大小均相同,因此可以根据起始时间戳加上窗口大小来计算结束时间戳。