2017-02-02 5 views
2

メッセージレイヤの要件があり、消費者が消費されるまでメッセージの順序を保持したいと考えています。私たちはカフカを同じように探検しています。私はカフカがパーティション間の順序を保証するのではなく、パーティション内で順序を維持することを保証します。カフカのメッセージの順序を維持する方法は?

特定のプロデューサ(特定のキー値属性を持つ)がトピックt1の特定のパーティションp1にメッセージを発行し、コンシューマが同じパーティションp1からメッセージをフェッチすることを確認できるかどうかを確認することができたら、それは私たちの目的に役立ちます。 kafka-console-producer.shヘルプの

、私は以下を参照:

--producer-property <producer_prop>  A mechanism to pass user-defined 
              properties in the form key=value to 
              the producer. 
--producer.config <config file>   Producer config properties file. Note 
              that [producer-property] takes 
              precedence over this config. 
--property <prop>      A mechanism to pass user-defined 
              properties in the form key=value to 
              the message reader. This allows 
              custom configuration for a user- 
              defined message reader. 

たちはプロデューサーがこの--propertyオプションを使用して、への書き込みをされたパーティションを制御することはできますか?

また、上位レベルのコンシューマでは、消費するパーティションを制御できますか? パーティションはコンシューマにどのように割り当てられていますか?

+0

パーティション内の順序を維持するために関連するイベントを生成する際に、一般的な 'key'を使用してください:http://stackoverflow.com/questions/29820384/apache-kafka-order-of-messages-with-multiple-partitions –

答えて

3

カフカは、トピック内の異なるパーティション間ではなく、パーティション内のメッセージに対して全体の順序を提供します。

単一パーティションのトピックがある場合は、順序が保証されます。あなたの消費者がうまくいくならば、心配する必要はありません。

あなたが少なくともKafka 0.9を持っていると仮定すると、各消費者はブローカーに登録するときにパーティションが割り当てられます。 2つのパーティションと2つのコンシューマを持つ単一のトピックがある場合は、それぞれに1つのパーティションが割り当てられます。この情報は、ConsumerPartitionOwnershipInfothe design docs for more detailsを参照してください。トピックの各パーティションは、コンシューマ・グループ内の1つのメンバにのみ割り当てられます。

0.9の消費者の動作と変更は、よくhereで説明されています。

+0

もし厳密なビジネス要件を持っていますが、非同期の方法でさまざまなサーバーにオブジェクトのリストを厳密な順序で作成しています。これをハッシュするには1つのパーティションまたは1つのキーを使用する必要があります。 – ha9u63ar

+0

必要なだけ多くの複製(最大でブローカー数に等しい)を持つ1つのパーティションを使用する。 – Tombart

関連する問題