2017-06-29 7 views
0

私が知っているように、自分のトピックの中にキー付きメッセージを使用すると、kafkaパーティショナーは常に同じキーを持つメッセージを同じパーティションに送ります。その特定のメッセージの集合。パーティションの割り当て、注文、パーティション番号のサイズ変更に関するメッセージ

また、デフォルトパーティショナーは、最初に、その特定のトピックで使用可能なパーティションの数に基づいて、メッセージを送信するパーティションを決定します。 messageKeyHash%numberOfPartitionsのようなものです。

私の質問は、キーを持って、私はLETの5パーティションでトピックを持っている場合は、されており、3メッセージを送信し、それらは全てパーティション0に割り当てられている、と後で私が増加そのトピックのパーティション番号が5から5 + xまでのである場合、キーAを持つメッセージはパーティション0に移動するはずか、パーティションAはキーAを持つメッセージを別のパーティションに送信する可能性があります。

言い換えれば、トピックのパーティション数を増やすと、実行時にそのトピックの特定のキーに対する注文保証が失われますか?

はいの場合、どうすればこの問題を解決できますか?注文保証が必要な場合は、常にオーバーパーティション化する必要がありますか?私はカスタムパーティショナーを実装すべきですか(私は方法を見ません)?

あなたはパーティションの数を増やす場合は、キーAとのメッセージがもはやパーティション0に別のパーティションを移動していない可能性があるため、あなたが

答えて

3

はい、あなたがそのような保証を失うことになりますありがとうございます。 一般的には、トピックを作成するときに、パーティションのオーバーパーティションまたは少なくとも最適なパーティション数を知ることが重要です。

1

あなたはより多くのトピックパーティションが作成されている場合でも、常に同じパーティションに同じキーを解決します独自のカスタムパーティショナーを作成することにより)この問題に二つの方法

1を解決することができます。 、オリジナルよりも多くのパーティションで新しいトピックを作成新しいものに古いトピックからのすべてのメッセージをコピーし、新しいトピックへのすべての新しい公開を行うことにより

https://kafka.apache.org/0102/javadoc/org/apache/kafka/clients/producer/Partitioner.html

2)。

関連する問題