Apache Kafka Streams中特定分区的聚合

Sam*_*amy 2 apache-kafka-streams

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

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

Mat*_*Sax 6

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

聚合总是按照key以下方式完成:http://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())并为要聚合的所有数据设置相同的密钥(如果要聚合所有分区,则使用单个密钥值 - - 但是,请记住,这可能很快成为瓶颈!).