2

SensorData2 つのセンサー S1 と S2 がデータ (タイムスタンプと値) を 2 つの異なるパーティション (S1 -> P1 と S2 -> P2 など) に送信するという名前の Kafka トピックがあるとします。ここで、これら 2 つのセンサーの値を個別に集計する必要があります。たとえば、1 時間の時間枠でセンサーの平均値を計算し、それを新しいトピックに書き込むとしますSensorData1Hour。このシナリオで

  1. KStreamBuilder#streamメソッドを使用して特定のトピック パーティションを選択するにはどうすればよいですか?
  2. 同じトピックの 2 つの (複数の) 異なるパーティションに集計関数を適用することは可能ですか?
4

1 に答える 1

7

単一のパーティションに (直接) アクセスすることはできず、複数のパーティションに集計関数を (直接) 適用することもできません。

集計は常に次のように行われ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())、集約するすべてのデータに同じキーを設定する必要があります (すべてのパーティションを集約する場合は、単一のキー値を使用します - - ただし、これはすぐにボトルネックになる可能性があることに注意してください!)。
于 2016-08-17T12:50:43.497 に答える