提问者:小点点

Kafka StreamsDSL折叠分层数据


使用Kafka StreamsDSL,这就是我想做的:

输入消息Serdes:键和值的Avro Key:记录字段L1、L2、L3 Value:记录值V(在本例中为int)

我想做的是以这样一种方式折叠这个继承权,即生成的流具有正确的总和值。例如,

Input:
L1   L2   L3  V
a1   b1   c1  v1
a1   b1   c2  v2
a1   b2   c1  v3
a1   b2   c2  v4
a2   b1   c1  v5



Output 1: (Data wanted at L1, L2)
L1   L2   V
a1   b1   v1 + v2
a1   b2   v3 + v4
a2   b1   v5

Output 2 (Data wanted at L1)
L1    V
a1    v1 + v2 + v3 + v4
a2    v2

StreamsDSL是否允许这样做?请注意,键类型会在所有输出中发生变化,我找不到执行这些rekey聚合的方法(因为rekey本质上应该合并多个值)。虽然可能有办法使用处理器API或基本Kafka消费者来实现这一点,但希望检查如何在DSL中执行此操作(如果可能)。


共1个答案

匿名用户

您应该能够使用selectKey()

KStream input = builder.stream(...);
input.selectKey(/*create a new output record with only 2 attributes L1 and L2*/)
     .groupyByKey()
     .aggregate(...);

input.selectKey(/*create a new output record with only 1 attribute L1*/)
     .groupByKey()
     .aggregate(...)