我如何使用三叉戟拓扑将元组写入redis和cassandra
How can I write a tuple in to redis as well as cassandra using trident topology
我正在编写一个 Trident 拓扑来处理来自 Kafka 的数据流并将其输入到 Redis 和 Cassandra。我能够将数据写入 Cassandra。现在我想将相同的数据写入 Redis。
有没有办法复制元组并将其分支为 2 个流,一个进入 Redis,另一个进入 Cassandra?
对于三叉戟,你可以这样搭配:
TridentTopology topology = new TridentTopology();
Stream stream = topology.newStream("MySpout", spout);
stream.partitionPersist(...); // to Redis
stream.partitionPersist(...); // to Cassandra
所以它会将流中的数据并行保存到两个数据库中。
不过,我也认为这种并行的事情是否应该在单个拓扑中完成,或者如果有两个不同的拓扑从同一主题读取是一个更好的主意。想象一下 Cassandra 集群宕机。在两种拓扑的情况下,您仍然可以继续将数据保存到 Redis。但是,如果只有一个拓扑,则每个未能转到 Cassandra 的元组很可能会导致 FailedException 触发重放,并且元组的每个后续重放都将不必要地再次将元组保存到 Redis。
我正在编写一个 Trident 拓扑来处理来自 Kafka 的数据流并将其输入到 Redis 和 Cassandra。我能够将数据写入 Cassandra。现在我想将相同的数据写入 Redis。
有没有办法复制元组并将其分支为 2 个流,一个进入 Redis,另一个进入 Cassandra?
对于三叉戟,你可以这样搭配:
TridentTopology topology = new TridentTopology();
Stream stream = topology.newStream("MySpout", spout);
stream.partitionPersist(...); // to Redis
stream.partitionPersist(...); // to Cassandra
所以它会将流中的数据并行保存到两个数据库中。
不过,我也认为这种并行的事情是否应该在单个拓扑中完成,或者如果有两个不同的拓扑从同一主题读取是一个更好的主意。想象一下 Cassandra 集群宕机。在两种拓扑的情况下,您仍然可以继续将数据保存到 Redis。但是,如果只有一个拓扑,则每个未能转到 Cassandra 的元组很可能会导致 FailedException 触发重放,并且元组的每个后续重放都将不必要地再次将元组保存到 Redis。