Kafka流dsl折叠分层数据

axzmvihb  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(332)

使用kafka streams dsl,这就是我想做的:
输入消息serdes:avro用于key和value key:record with fields l1,l2,l3 value:record with 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

有没有一种方式流dsl会允许这一点?请注意,所有输出的键类型都会发生变化,我找不到执行这些rekey+聚合的方法(因为rekey本质上应该合并多个值)。虽然可以使用处理器api或基本的kafka使用者来实现这一点,但是您想看看如何在dsl中实现这一点(如果可能的话)。

hwamh0ep

hwamh0ep1#

你应该可以使用 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(...)

相关问题