apache-kafka - Kafka Streams DSL 折叠分层数据
问题描述
使用 Kafka Streams DSL,这就是我想要做的:
输入消息 Serdes:Avro 用于键和值键:使用字段 L1、L2、L3 记录值:使用值 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
Streams DSL 有没有办法允许这样?请注意,所有输出的键类型都发生了变化,我找不到执行这些 rekey + 聚合的方法(因为 rekey 本质上应该合并多个值)。虽然可能有一些方法可以使用处理器 API 或基本的 Kafka 消费者来实现这一点,但想要检查如何在 DSL 中做到这一点(如果可能的话)。
解决方案
您应该能够使用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(...)
推荐阅读
- c++ - 如何准确地对 C/C++ 代码进行基准测试?
- websocket - 海王星 | 小鬼蟒 | 使用 websocket 的并行查询
- r - 将数据库 ID 主题字符串重新分配为 R 中的因素
- avro - 如何在融合模式注册表中发展模式
- c++ - 在模态对话框后面或关闭后打开一个对话框
- swift - Swift:使用 VNRecognizeText 时如何获取字符框信息
- ios - 将dylib嵌入iOS应用程序的正确方法
- charts - Google 可视化表格列宽和行高
- xamarin.forms - 以 webview xamarin 形式打开文件不起作用
- reactjs - TypeError: d[("get" + method)] is not a function in reactjs while reading data from firebase