2

假设我有一个名为 Kafka 的主题SensorData,两个传感器 S1 和 S2 将数据(时间戳和值)发送到两个不同的分区,例如 S1 -> P1 和 S2 -> P2。现在我需要分别汇总这两个传感器的值,假设计算 1 小时时间窗口内的平均传感器值并将其写入新主题SensorData1Hour。有了这个场景

  1. 如何使用该KStreamBuilder#stream方法选择特定主题分区?
  2. 是否可以在来自同一主题的两个(多个)不同分区上应用一些聚合函数?
4

1 回答 1

7

您不能(直接)访问单个分区,也不能(直接)在多个分区上应用聚合函数。

聚合总是按照keyhttp ://docs.confluent.io/current/streams/developer-guide.html#stateful-transformations

  1. 因此,您可以为每个分区使用不同的键,而不是按键聚合。请参阅http://docs.confluent.io/current/streams/developer-guide.html#windowing-a-stream

最简单的方法是让您的每个生产者立即对每条消息应用一个密钥。

  1. 如果要聚合多个分区,首先需要设置一个新键(例如,使用selectKey())并为要聚合的所有数据设置相同的键(如果要聚合所有分区,您将使用单个键值 - - 但是,请记住,这可能很快成为瓶颈!)。
于 2016-08-17T12:50:43.497 回答