2017-11-05 11 views
0

私は多数の消費者が消費するメッセージをKafkaに公開しています。これらは等冪であるので、1つのメッセージが複数回消費されるかどうかは関係ありません。Kafka:メッセージがまだ存在しない場合にのみ公開する

ただし、パフォーマンス上の理由から、私の(単一の)プロデューサーが既にキューに存在するメッセージを公開することは望ましくありません。メッセージがID文字列であるとしましょう.2つのメッセージが等しいかどうかを確認するのは非常に簡単です。

私はカフカだけではこのようなパフォーマンスの向上に対処できないと考えています。この問題に対処するためのツールやコンセプトはありますか?

+0

複数回処理されていない(または識別できていない)ため、または理由があるため、複製を公開したくないのですか?すでに処理されたメッセージ、または処理されなかったメッセージもプッシュしたくないのですか?カフカに加えてあなたが許容できるインフラストラクチャーは何ですか?あなたは "圧縮された"トピックの使用について考えましたか? –

+0

はい - 処理に時間がかかり、処理に時間がかかる重複でキューが満杯になります。これは、すべての重複の後に続く他のメッセージの処理を遅らせます。私の目標は、メッセージを公開しようとしているのであれば、すでにキューに入っているかどうか(位置は問題ではありません)を確認したいのですが、そうであれば公開したくありません。私は圧迫を調べる必要があると思います、ありがとう。 – valenterry

+0

すでに処理されキューから取り出された新しいメッセージを送信することを許可していますか?または、すでに処理されたメッセージに対しても重複を検出する必要がありますか? –

答えて

1

カフカは、干し草の針を探すことに沸騰するものにはあまり適していません。なぜなら、あなたができるのは線形検索だからです。

カフカでめったに配信されないことは、クエリのサポートがより優れた外部データストアを使用することで最も効果的です(ここでは、CassandraまたはElasticsearchは非常に多くのオプションのうちの2つです)。次に、作成したいメッセージがそのデータストアにある場合はプロデューサチェックがあり、そのデータストアにメッセージを書き込むことのみを目的としたトピックのコンシューマが存在します。サイズに基づいた保持と、異なるメッセージが同じキーを持つキーイングスキームがない場合、これはフェイルセーフでなければなりません。つまり、そうではないと考えることはできません。誤ってメッセージを書かないようにします。書きます。

関連する問題