私の Java デーモン アプリケーションでは、複数のサーバー (高レベル コンシューマー グループ) にまたがる 100 を超えるパーティションを持つ Kafka トピックからイベントを読み取っています。そのため、イベント名ごとに 1 分あたりのイベント数を集計し、それを時系列データベースにフラッシュする必要があります。イベントのタイムスタンプは順不同である可能性があり、消費者からの現在の時間より遅れている可能性があることに注意してください。イベントのフォーマットは次のとおりです。
Timestamp (in ms but showing in text for readability purpose ) event count
yyyy/moth/day HH:mm:ss
2015/01/01 00:03:35 E2 100
2015/01/01 00:01:35 E1 200
2015/01/01 00:00:35 E2 300
2015/01/01 00:01:27 E2 700
2015/01/01 00:00:23 E2 400
2015/01/01 00:00:30 E1 500
2015/01/01 00:00:50 E1 600
ストレージエンジンの前に事前集計を行う必要があります (任意の時系列データベースに保存されます)。
ストレージ エンジン (フロア (タイムスタンプ) 分) に次のように集計して保存します。
2015/01/01 00:03:00 E2 100
2015/01/01 00:01:00 E1 200
2015/01/01 00:01:00 E2 700
2015/01/01 00:00:00 E1 1100
2015/01/01 00:00:00 E2 100
コード hale メトリックと statsD も評価しました (グラファイト collectD (オプションではありません) が、これらすべてのライブラリの問題は、イベントをリアルタイムで集約することであり、これは不可能です。そのため、カウントを保持するデータ構造として LRUConcurrentHashMap を使用することを考えていました。毎分、このマップをストレージにフラッシュします.また、LRU 構造を 1 時間ほど維持する必要があります.遅延または遅延または順序の乱れによりデータカウントが遅れるためです.
オープンソースのライブラリがこれを行っていること、または集約とフラッシュに対するより良いアプローチを知っていますか?