現在、私は異なるメッセージングシステムを評価中です。 私は自分自身に答えることができなかったApache Kafkaに関する質問があります。Kafkaプロデューサーはトピックとパーティションを作成できますか?
カフカのプロデューサーはトピックやパーティションを(既存のトピックでも)動的に作成できますか? 「はい」の場合、それに付随する不利な点はありますか?アドバンス
現在、私は異なるメッセージングシステムを評価中です。 私は自分自身に答えることができなかったApache Kafkaに関する質問があります。Kafkaプロデューサーはトピックとパーティションを作成できますか?
カフカのプロデューサーはトピックやパーティションを(既存のトピックでも)動的に作成できますか? 「はい」の場合、それに付随する不利な点はありますか?アドバンス
で
おかげ更新日:
カフカのブローカーは、プロパティを持ってい: auto.create.topics.enable
あなたがtrueにプロデューサーがメッセージを発行した場合、その設定した場合トピックを新しいトピック名に置き換えると、自動的にトピックが作成されます。
Confluentチームは、環境に応じてトピックが爆発的になり、作成時に常にトピックの作成時に同じデフォルト値が設定されるため、これを行わないことをお勧めします。ディスク障害が発生した場合でもトピックの耐久性を確保するには、少なくとも3の複製係数を持つことが重要です。
kafkaブローカーを開始するときに、conf/server.properties
ファイルに一連のプロパティを定義することができます。これをtrue(デフォルト)に設定するとプロパティの1つがauto.create.topics.enable
になります。kafkaは、既存のトピック以外にメッセージを送信すると自動的にトピックを作成します。パーティション番号は、この同じファイル内のデフォルト設定によって定義されます。
短所:この方法で作成されたトピックは、常に同じデフォルト設定(パーティション、レプリカなど)を持ちます。
どのメッセージングシステムでも、作成者がトピック/パーティションやキューを動的に作成することはお勧めしません。
大文字小文字を使用する場合は、おそらくdevice_idをパーティションのキーとして使用してメッセージを区別することができます。この方法では、1つのトピックを使用できます。
私はそれについて考えました。問題は、すべてのデバイス/デバイスIDがわからないということです。つまり、データを動的に公開するデバイスを追加したいと考えています。 – smartwepa
javaからは、必要に応じてトピックを作成できます。推奨かどうかは、ユースケースによって異なります。例えば。あなたのトピック名がプロデューサーへの着信ペイロードの関数である場合、それは有用かもしれません。以下は、カフカ0.10.xで動作するコードスニペットです。
void createTopic(String zookeeperConnect, String topicName) throws InterruptedException {
int sessionTimeoutMs = <some-int-value>;
int connectionTimeoutMs = <some-int-value>;
ZkClient zkClient = new ZkClient(zookeeperConnect, sessionTimeoutMs, connectionTimeoutMs, ZKStringSerializer$.MODULE$);
boolean isSecureKafkaCluster = false;
ZkUtils zkUtils = new ZkUtils(zkClient, new ZkConnection(zookeeperConnect), isSecureKafkaCluster);
Properties topicConfig = new Properties();
try {
AdminUtils.createTopic(zkUtils, topicName, 1, 1, topicConfig,
RackAwareMode.Disabled$.MODULE$);
} catch (TopicExistsException ex) {
//log it
}
zkClient.close();
}
注:値を大きくすることはできません。パーティションの。
ありがとう、私は私の場合、デバイス(プロデューサ)ごとにトピック/パーティションが必要です。どれくらいのデバイスがあるかわからないので、動的に追加したいと思っています。上記の解決策は、少し "鈍い"と聞こえる。私は古典的なPub/Subシステムがうまくいくかもしれないと思う。 – smartwepa