Hi All,

Let's consider a topic with multiple partitions and messages written in 
event-time order without any particular partitioning scheme. Kafka Streams 
application does some transformations on these messages, then groups by some 
key, and then aggregates messages by an event-time window with the given grace 
period.

Each task could process incoming messages at a different speed (e.g., because 
running on servers with different performance characteristics). This means that 
after groupBy shuffle, event-time ordering will not be preserved between 
messages in the same partition of the internal topic when they originate from 
different tasks. After a while, this event-time skew could become larger than 
the aggregation window size + grace period, which would lead to dropping 
messages originating from the lagging task.

Should it be a real concern, especially when processing large amounts of 
historical data? Increasing the grace period doesn't seem like a valid option 
because it would delay emitting the final aggregation result. Apache Flink 
handles this by emitting the lowest watermark on partitions merge. Does Kafka 
Streams offer something to deal with this scenario?

Regards,
Boris

Reply via email to