You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "Sören Henning (Jira)" <ji...@apache.org> on 2020/03/04 12:49:00 UTC

[jira] [Created] (KAFKA-9649) Remove/Warn on use of TimeWindowedSerde with no specified window size

Sören Henning created KAFKA-9649:
------------------------------------

             Summary: Remove/Warn on use of TimeWindowedSerde with no specified window size
                 Key: KAFKA-9649
                 URL: https://issues.apache.org/jira/browse/KAFKA-9649
             Project: Kafka
          Issue Type: Improvement
          Components: streams
            Reporter: Sören Henning


The API of the [{{TimeWindowedSerde}}|https://github.com/apache/kafka/blob/trunk/streams/src/main/java/org/apache/kafka/streams/kstream/WindowedSerdes.java] promotes its construction without specifying a window size:
{noformat}
public TimeWindowedSerde(final Serde<T> inner)
{noformat}
While code using this constructor looks absolutely clean, it leads to fatal errors at runtime, which turned out to be very hard to discover.

The reason for these error can be found in the construction of the [{{TimeWindowedDeserializer}}|https://github.com/apache/kafka/blob/trunk/streams/src/main/java/org/apache/kafka/streams/kstream/TimeWindowedDeserializer.java], which is created via:
{noformat}
// TODO: fix this part as last bits of KAFKA-4468
public TimeWindowedDeserializer(final Deserializer<T> inner) {
  this(inner, Long.MAX_VALUE);
}
{noformat}
The TODO comment suggests that this issue is (or at least was) already known.

We suggest to either remove the {{TimeWindowedSerde(final Serde<T> inner)}} constructor or at least to warn when using it (if required for backwards compatiblity). The ideal solution of course would be to get the window size from some externally provided context. However, I expect this to be difficult to realize. Same applies also the {{TimeWindowedDeserializer(final Deserializer<T> inner)}} constructor.

A further minor suggestion in this context: As now most Kafka Streams time declarations use {{Duration}}s instead of long-encoded millisseconds, I suggest to allow specifying window sizes with a {{Duration}}.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)