1

カフカの接続を使用して、カッサンドラからカフカのトピックに更新をストリームすることを考えています。 StreamReactorの既存のコネクタは、最後のポーリング以降に新しい変更を抽出するためにタイムスタンプまたはuuidtimestampを使用しているようです。タイムスタンプの値は、insert文でnow()を使用して挿入されます。コネクターは、最後に受信された最大時間を保存します。cassandra kafka接続元と最終的な一貫性

Cassandraは最終的に一貫しているので、新しい変更を得るために時間範囲を使用して繰り返しクエリを実行すると、実際に何が起こっているのか疑問に思っています。 Cassandraに挿入された行を見逃してしまう危険はありません。なぜなら、WHERE create> = maxTimeFoundSoFarを使用するときに照会されたノードに「遅く到着」したからです。

答えて

1

はい、一貫性レベル1を読み書きに使用している場合は、既に処理していたときに新しい "データ"が表示されることがありますが、より高い整合性を使用しても、あなたが持っている設定に応じて "問題"が発生します。基本的には間違っていることがたくさんあります。

古いカサンドラ式NUM_NODES_RESPONDING_TO_READ + NUM_NODES_RESPONDING_TO_WRITE > REPLICATION_FACTORを使用してこれをやっていないの可能性を高めることができますが、あなたはカサンドラからnow()を使用しているので、あなたは、高周波数データを持っている場合でもデータを逃す可能性があるので、ノードのクロックは、それらの間のミリ秒オフセットを持っているかもしれません。私は人々がクロックスキューを本当にタイトに保つためにgpsモジュールを使ってラズベリーパイを実際に使っているいくつかのシステムを知っています:)

あなたのユースケースについてもっと詳しく説明しなければならないでしょう。 「慎重」ではありませんが、それでも100%の保証はありません。それ以外の場合は、新しいデータが入り込んで解決するのに十分なオフセットでデータを処理します。

基本的には、過去の移動時間ウィンドウを維持してから、それを移動して、最後の1分間という新しいものを考慮しないようにする必要があります。そうすることで、データが「安定している」ことを確認しています。

私は、複数日の遅れを伴う感覚データを処理したいくつかの使用例がありました。一部のプロジェクトでは、一部のデータを無視していましたが、そのデータは月単位で報告するためのものでしたので、常に古いデータを処理してレポートデータベースに追加しました。すなわち、私たちは歴史の3日前の時間窓を維持した。

あなたのユースケースによって異なります。

+1

お返事ありがとうございます。だから私は私の前提に完全に間違っていませんでした。私は、カッサンドラからカフカへのデータを他の消費者に「リアルタイム」にプッシュするために公開することを考えていました。私は本当にデータを失いたくないので、私のアプローチは理想的ではないかもしれません – KTrum

関連する問題