title: パーティションドトピック lead: トピック内の負荷を分散させる事でメッセージのスループットを向上 tags_ja:
デフォルトでは、Pulsarの{% popover_ja トピック %}は単一の{% popover_ja Broker %}によって提供されます。しかし単一のBrokerを使用すると、トピックの最大スループットが制限されてしまいます。パーティションドトピックは複数のBrokerに跨らせる事のできる特殊なトピックであり、より高いスループットの実現を可能にします。パーティションドトピックがどのように動作するかの説明は下記のコンセプトのセクションを参照してください。
Pulsarのクライアントライブラリを使用する事でパーティションドトピックにメッセージを発行できます。また、Pulsarのadmin APIを使用する事でパーティションドトピックの作成と管理ができます。
パーティションドトピックにメッセージを発行する場合、通常のトピックとの唯一の違いは新しい{% popover_ja Producer %}を作成する時にルーティングモードを指定する必要がある事です。Javaの例を以下に示します。
Javaクライアントのパーティションドトピックへのメッセージの発行は、通常のトピックに対するメッセージの発行と同様に動作します。違いは、現在使用可能なメッセージルータまたはカスタムルータのどちらかを指定する必要がある事です。
Producerの設定に使用する{% javadoc ProducerConfiguration client org.apache.pulsar.client.api.ProducerConfiguration %}オブジェクトでルーティングモードの指定が可能です。選択肢は次の3つです:
SinglePartition
RoundRobinPartition
CustomPartition
以下に例を示します:
String pulsarBrokerRootUrl = "pulsar://localhost:6650"; String topic = "persistent://my-property/my-cluster-my-namespace/my-topic"; PulsarClient client = PulsarClient.create(pulsarBrokerRootUrl); ProducerConfiguration config = new ProducerConfiguration(); config.setMessageRoutingMode(ProducerConfiguration.MessageRoutingMode.SinglePartition); Producer producer = client.createProducer(topic, config); producer.send("Partitioned topic message".getBytes());
カスタムメッセージルータを使用するためには、{% javadoc MessageRouter client org.apache.pulsar.client.api.MessageRouter %}インターフェースの実装を提供する必要があります。これには、choosePartition
メソッド1つしかありません:
public interface MessageRouter extends Serializable { int choosePartition(Message msg); }
以下は、全てのメッセージをパーティション10にルーティングするルータ (あまり有用ではありません) です:
public class AlwaysTenRouter implements MessageRouter { public int choosePartition(Message msg) { return 10; } }
この実装を用いてメッセージを送信するには次のようにします:
String pulsarBrokerRootUrl = "pulsar://localhost:6650"; String topic = "persistent://my-property/my-cluster-my-namespace/my-topic"; PulsarClient client = PulsarClient.create(pulsarBrokerRootUrl); ProducerConfiguration config = new ProducerConfiguration(); config.setMessageRouter(AlwaysTenRouter); Producer producer = client.createProducer(topic, config); producer.send("Partitioned topic message".getBytes());
{% include explanations/ja/admin-setup.md %}
{% include explanations/ja/partitioned-topic-admin.md %}
{% include explanations/ja/partitioned-topics.md %}