假设我有一个名为 Kafka 的主题SensorData
,两个传感器 S1 和 S2 将数据(时间戳和值)发送到两个不同的分区,例如 S1 -> P1 和 S2 -> P2。现在我需要分别汇总这两个传感器的值,假设计算 1 小时时间窗口内的平均传感器值并将其写入新主题SensorData1Hour
。有了这个场景
- 如何使用该
KStreamBuilder#stream
方法选择特定主题分区? - 是否可以在来自同一主题的两个(多个)不同分区上应用一些聚合函数?
假设我有一个名为 Kafka 的主题SensorData
,两个传感器 S1 和 S2 将数据(时间戳和值)发送到两个不同的分区,例如 S1 -> P1 和 S2 -> P2。现在我需要分别汇总这两个传感器的值,假设计算 1 小时时间窗口内的平均传感器值并将其写入新主题SensorData1Hour
。有了这个场景
KStreamBuilder#stream
方法选择特定主题分区?您不能(直接)访问单个分区,也不能(直接)在多个分区上应用聚合函数。
聚合总是按照key
:http ://docs.confluent.io/current/streams/developer-guide.html#stateful-transformations
最简单的方法是让您的每个生产者立即对每条消息应用一个密钥。
selectKey()
)并为要聚合的所有数据设置相同的键(如果要聚合所有分区,您将使用单个键值 - - 但是,请记住,这可能很快成为瓶颈!)。