2017-11-22 11 views
0

コンフルエントなカフカで多くのアーティファクトを読んだ後、通常のチャットシステムを実装しようとします。しかし、私はいくつかの構造設計を行う際にいくつかの問題に出会った。 私のデータのデータベースとしてmysqlを使用する場合、ユーザテーブルのuser_id、メッセージテーブルのmessage_idなどの意味のあるすべてのメッセージにidを与えることができます。モデルテーブルにIDを与えた後、クライアントとサーバーがコミュニケーションを取るのは非常に便利です。 しかし、Kafkaストリームでは、KTableですべての意味のあるモデルに一意のIDを与えるにはどうすればよいですか?それとも本当に私がこれをする必要がありますか?カフカストリームを使用しているときにメッセージのIDを生成する方法は?

+1

この質問は非常に広いです。ランダムな 'UUID'を生成するのに十分ではないでしょうか? https://docs.oracle.com/javase/7/docs/api/java/util/UUID.html –

+0

ランダムなUUID Idはこれを行う方法ですが、mysqlのようなシーケンス番号が必要な場合はどうすればいいですか?この?私は、メッセージにIDを与える標準的な方法がカフカストリームであるかどうかを知りたいですか?一方、uuidはキーが長すぎ、生成が少し遅いです。 – Frio

答えて

0

多分私は自分自身の質問に答えることができます。

mysqlでは、すべてのデータが1つの場所に移動し、新しいIDが自動的に割り当てられるため、sequenceIdを直接使用できます。テーブルが大きくなりすぎたときしかし、我々はまた、自動これらのテーブルにIDを生成しているため0

から開始され、各レコードの一意のIDを再生成するために、いくつかの小さなtables.Inにそのような場合に、テーブルを分割するために、我々はまた、必要がある必要があります

カフカでも同じかもしれません。 kafkaに1つのパーティションしかない場合、すべてのメッセージが1つの場所に移動するので、kafkaが生成したIDのidを使用することができます。したがって、それらは重複しません。しかし、より多くのパーティションが必要な場合、異なるパーティションから生成されたこれらのIDがグローバルに固有ではないことにも注意する必要があります。

私たちがするべきことは、私自身のためにIDを生成することです。 UUIDはこれを行うための速い方法ですが、私は数字を持っています。少しアルゴリズムを使ってこれを実装することができます。たぶん、分散環境には、このような構造を使用します。

[NODEID +スレッドID + CURRENT_TIME + auto_increased_number]

関連する問題