カフカストリームDSL:ウィンドウ集約のためのアプリケーションラグ

HS Manjunath:

私たちは、次のユースケースがあります。

トピックから読み、groupByKey(予想スループットは、レコードキーごとに2秒)、1分ホッピング期間で30分ウィンドウのウィンドウ集計を行います。集約は、単に受け取ったレコードで追加されます。

アプリケーションの起動時にすべてのものはなく、後の段階で罰金を作品際に集約増加アプリケーション遅くなり、ラグのサイズ

Toplogy

KStream<String, Foo> numericStream = builder.stream("topic", Consumed.with(Serdes.String(), FooSerde));
static Duration WINDOW_MS = Duration.ofMinutes(30);
static Duration ADVANCE_MS = Duration.ofMinutes(15);


KStream<Windowed<String>, Foo1> windowedStream = numericStream.peek((key, value) -> System.out.println(value.getDateTime()))
        .groupByKey()
        .windowedBy((TimeWindows.of(WINDOW_MS).advanceBy(ADVANCE_MS)).grace(Duration.ofMillis(30)))
        .aggregate(new Initializer<Foo1>() {
            @Override
            public  Foo1 apply() {
                return new Foo1();
            }},
                   (key, value, aggregate) -> {
                       aggregate.append(value);
                       return aggregate;
                   },
                   Materialized.<String, Foo1, WindowStore<Bytes,byte[]>>as("some_name").withValueSerde(Foo1Serde))
        .toStream()
        .peek((key, value) -> System.out.println(" Key: "+key+ " Start: "+getISTTime(key.window().start()) + " End: "+ getISTTime(key.window().end()) +" Count: " + value.getCount() ));

各レコードのサイズは20キロバイト程度です。凝集体のサイズが10メガバイトひいてはラグの周りに上方になると記録のための処理時間が2秒を超えました。

状態ストアは、常に照会され、最新のパケットと状態店舗と異なる間隔を持つ点で最大の日付でなければなりませんようCOMMIT_INTERVAL_MS_CONFIGは0に設定されています。

  1. どのように我々はそれがRocksDB I / O操作に関連するものです、アプリケーションの遅れを削除することができますか?カウント動作の代わりに、集計は一切の遅れを持っていないとして、

  2. 同じキーを持つレコードが意志のスレッド/複数のインスタンスのヘルプので、同じパーティションに行くしかし、トピックごとに3つのパーティションがありますか?

  3. 我々はまた、より大きな凝集体のためのラグのような種類を作成窓掛けん、ウィンドウなしでこれをやって考えていますか?

ブルーノCadonna:
  1. あなたが書いたとするとRocksDBから、ますます大容量のデータを読み込むため、処理が遅くなることがあります。

  2. はい、この場合にも助けをそれぞれかもしれないが1例で3つのスレッドを使用して、または1つのスレッドで3つのインスタンスを開始します。あなたのトポロジと3つのパーティションを使用すると、処理は、3つのタスクに分配されます。あなたは一つのスレッドでインスタンスを1つだけ持っている場合は、すべての3つのタスクは、同じスレッドで実行されます。あなたは3つのスレッドで1つのインスタンスを指定することにより、スケールアップすることもできますし、別の計算ノード上で一つのスレッドごとに3つのインスタンスを起動することでスケールアウトすることができます。一つのスレッドを持つ2つのインスタンス、二つのスレッドを持つ1と他の同様の間での設定も動作します。

  3. ウインドウがなければ、凝集体は期限切れにならないでしょうし、状態ストアから削除されることはありません。このように、あなたの状態の店舗のデータは無限に成長すると、おそらく状態ストアを遅くします。

あなたの状態ストアを照会する対話型のクエリを使用する場合は、対話型クエリ状態ストアの前にクエリキャッシュするので、0にCOMMIT_INTERVAL_MS_CONFIGを設定する必要はありません。それは、ディスクへの連続書き込みデータますので、ディスクI / Oが増加しているため、実際に、ゼロにCOMMIT_INTERVAL_MS_CONFIGを設定することも、あなたの処理が遅くなる場合があります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=332427&siteId=1