3

Kafka からのデータのストリームを処理し、Redis と Cassandra にフィードする Trident トポロジを作成しています。Cassandra にデータを書き込むことができます。ここで、同じデータを Redis に書き込みたいと思います。

タプルを複製し、1 つが Redis に入り、もう 1 つが Cassandra に入る 2 つのフローに分岐する方法はありますか?

4

1 に答える 1

3

トライデントの場合、次のようにうまくいくことができます:

TridentTopology topology = new TridentTopology();
Stream stream = topology.newStream("MySpout", spout);
stream.partitionPersist(...); // to Redis
stream.partitionPersist(...); // to Cassandra

したがって、ストリームから両方のデータベースに並行してデータが保存されます。

ただし、このような並列処理を 1 つのトポロジ内で行う必要があるかどうか、または同じトピックから読み取る 2 つの異なるトポロジを使用する方がよいかどうかについても考えます。Cassandra クラスターがダウンしたとします。2 つのトポロジの場合でも、データを Redis に保存し続けることができます。しかし、トポロジーが 1 つしかない場合、すべてのタプルが Cassandra への移動に失敗すると、FailedException が発生してリプレイがトリガーされる可能性が高く、その後タプルをリプレイするたびに、タプルを Redis に不必要に再度保存する必要があります。

于 2015-08-05T13:44:06.553 に答える