title: パーティションドトピック lead: トピック内の負荷を分散させる事でメッセージのスループットを向上 tags_ja:

  • topics
  • partitioning
  • admin
  • clients

デフォルトでは、Pulsarの{% popover_ja トピック %}は単一の{% popover_ja Broker %}によって提供されます。しかし単一のBrokerを使用すると、トピックの最大スループットが制限されてしまいます。パーティションドトピックは複数のBrokerに跨らせる事のできる特殊なトピックであり、より高いスループットの実現を可能にします。パーティションドトピックがどのように動作するかの説明は下記のコンセプトのセクションを参照してください。

Pulsarのクライアントライブラリを使用する事でパーティションドトピックにメッセージを発行できます。また、Pulsarのadmin APIを使用する事でパーティションドトピックの作成と管理ができます。

パーティションドトピックへのメッセージの発行

パーティションドトピックにメッセージを発行する場合、通常のトピックとの唯一の違いは新しい{% popover_ja Producer %}を作成する時にルーティングモードを指定する必要がある事です。Javaの例を以下に示します。

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());

Pulsar adminのセットアップ

{% include explanations/ja/admin-setup.md %}

パーティションドトピックの管理

{% include explanations/ja/partitioned-topic-admin.md %}

コンセプト

{% include explanations/ja/partitioned-topics.md %}