Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Current stateUnder Discussion"

Discussion thread: here

JIRA: KAFKA-10366 and KAFKA-9649here and here

Please keep the discussion on the mailing list rather than commenting on the wiki (wiki discussions get unwieldy fast).

Motivation

When doing windowed aggregations the window Window size is not passed to the Kafka consumer , as there is no config for window size, so when the consumer creates a TimeWindowedDeserializer, it during windowed aggregations, so the consumer uses the default Long.MAX_VALUE , resulting in imprecise testing output. Both when initializing the deserializer. Both TimeWindowedSerde and TimeWindowedDeserializer have a default constructor that does not require a window size, causing fatal errors at runtime for some programs. 

Public Interfaces

In ConsumerConfig.java add WINDOW_SIZE_MS add window.size.ms

Code Block
languagejava
titleConsumerConfig
linenumberstrue
/** <code>window.size.ms</code> */
public static final String WINDOW_SIZE_MS_CONFIG = "window.size.ms";
private static final String WINDOW_SIZE_MS_DOC = "Passes window size to the deserializer in order to calculate window end times. Default is Long.MAX_VALUE";

...

Code Block
languagejava
titleTimeWindowedDeserializer
linenumberstrue
@Deprecated
public TimeWindowedDeserializer(final Deserializer<T> inner) {
	this(inner, Long.MAX_VALUE);
}

/**
* Construct a {@code TimeWindowedSerde} object for the specified inner class type.
*/
@Deprecated
static public <T> Serde<Windowed<T>> timeWindowedSerdeFrom(final Class<T> type) {
	return new TimeWindowedSerde<>(Serdes.serdeFrom(type));
}


Proposed Changes

Add window.size.ms to the ConsumerConfigs class and to ensure that the desired window size is initialized set when the consumer creates the TimeWindowedDeserializer instance. This is relevant for consuming TimeWindowed records directly, which is particularly helpful for testing windowed aggregations. Without this change, all windows will have a size and end time of Long.MAX_VALUE.

Additionally, deprecate constructors in both TimeWindowedDeserializer and WindowedSerdes that don't require a window size. This ensures that the window size would be properly set before encountering any instances where it should be used.

Note that to use the windows.size.ms config through the console consumer (if desired), add the key.deserializer. prefix  prefix and pass it in as a property.

...