2017-11-08 12 views
1

私はcamel-kafkaバージョン2.19.2を使用しています。この質問を投稿する前にCamelsのウェブサイト - camel-kafkaのドキュメントを調べました。差分パーティションキーとApache Camelのキー

メッセージを生成するための次の例があることがわかりました。

Producing messages: 
from("direct:start").process(new Processor() { 
        @Override 
        public void process(Exchange exchange) throws Exception { 
         exchange.getIn().setBody("Test Message from Camel Kafka Component Final",String.class); 
         exchange.getIn().setHeader(KafkaConstants.PARTITION_KEY, 0); 
         exchange.getIn().setHeader(KafkaConstants.KEY, "1"); 
        } 
       }).to("kafka:localhost:9092?topic=test"); 

あなたが見ることができるように、またKafkaConstants.PARTITION_KEYKafkaConstants.KEY

が存在するが、詳細については、私は4つのパーティションでカフカトピックを持っています。

私はその両方で遊んだので、KafkaConstants.KEYはメッセージキーとして機能し、このキーはメッセージがどのパーティションに送られるかを判断するために使用されることを理解しました。

KafkaConstants.PARTITION_KEY私は混乱しているパーティション番号を設定しようとしましたが、それでもメッセージは4つのパーティションすべてに送信されました。

この2つのKafkaConstantsの違いを誰でも指定できますか?そして具体的にはKafkaConstants.PARTITION_KEYは何用ですか?

EDIT:使用しているラクダのバージョンを修正しました。

KEY:2.21.0-SNAPSHOTドキュメントのgithubのドキュメントから

答えて

1

レコード・キー(またはヌルキーが指定されていない場合)。このオプションが設定されている場合、それはヘッダリンクKafkaConstants.KEYよりも優先

PARTITION_KEY: (何のパーティションが指定されていない場合はnull)レコードが送られる先のパーティション。カフカで

:完全性についてはhttps://github.com/apache/camel/blob/master/components/camel-kafka/src/main/docs/kafka-component.adoc

:このオプションが設定されている場合、それはKafkaConstants.PARTITION_KEYヘッダリンク上

ソースを優先します

  • データは実際にはキー - です値ペア
  • そのストレージはパーティションレベルで発生します

鍵は、クラスタ内のインテリジェントかつ効率的なデータ配信に使用されます。キーに応じて、Kafkaは特定のパーティションにデータを送信し、そのデータも確実に複製されます(構成)。

あなたがApacheのキャメルプロジェクトからキャメル・カフカのmasterブランチに見ることができるように:

https://github.com/apache/camel/blob/master/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaProducer.java#L202-L215

あなたはあなたがパーティション・キーを使用することができるようにするためにキーを指定する必要がありますあなたのラクダのルートで指定します。

+0

github docへのリンクありがとう - 明らかに私はキーを提供しなければならず、次にpartition_keyだけが動くことができます。 KafkaConstants.PARTITION_KEY - "カフカ。PARTITION_KEY " - 整数 - パーティションを明示的に指定します(KafkaConstants.KEYヘッダーが定義されている場合のみ使用されます) したがって、回答を更新することができます。 –

関連する問題