想象一个示例记录,例如:
{
"a": "string",
"b": "string",
"c": "string"
}
字段a
是我们在生产者端和KStream端的分组键。现在,我需要基于字段groupBy
b
并对其应用聚合。据我从documentation所看到的,这将导致数据重新分配。
// group by current key `a`
input.groupByKey().windowBy(...)
// re-key and window again based on `b` which causes data redistribution
input.selectKey((key, value) -> value.getFieldB()).groupByKey().windowedBy(...)
但是,由于我们的业务逻辑,我们已经知道字段b
与a
相关,并且它将与a
驻留在同一分区上。因此,从本质上讲,无需在groupBy
期间重新分发数据。
长话短说,我需要一个不会重新分发数据的groupBy
版本。