我正在编写一个三叉戟拓扑来处理来自Kafka的数据流,并将其输入redis和cassandra。我能把数据写进Cassandra。现在我想把同样的数据写入redis。有没有办法复制元组并将其分支到2个流中,其中一个流进入redis,另一个流进入cassandra?
m0rkklqb1#
对于三叉戟,您可以这样使用smth:
TridentTopology topology = new TridentTopology(); Stream stream = topology.newStream("MySpout", spout); stream.partitionPersist(...); // to Redis stream.partitionPersist(...); // to Cassandra
因此,它将把数据流中的数据并行地保存到两个数据库中。然而,我也会想,如果这种并行的事情应该在一个拓扑内完成,或者如果有两个不同的拓扑从同一个主题阅读是一个更好的主意。想象一下,Cassandra星系团倒下了。在两种拓扑的情况下,您仍然可以继续将数据保存到redis。但是,如果只有一个拓扑,每个元组都无法转到cassandra,很可能会导致failedexception触发重放,并且每个元组的后续重放都会涉及到不必要地再次将元组保存到redis。
1条答案
按热度按时间m0rkklqb1#
对于三叉戟,您可以这样使用smth:
因此,它将把数据流中的数据并行地保存到两个数据库中。
然而,我也会想,如果这种并行的事情应该在一个拓扑内完成,或者如果有两个不同的拓扑从同一个主题阅读是一个更好的主意。想象一下,Cassandra星系团倒下了。在两种拓扑的情况下,您仍然可以继续将数据保存到redis。但是,如果只有一个拓扑,每个元组都无法转到cassandra,很可能会导致failedexception触发重放,并且每个元组的后续重放都会涉及到不必要地再次将元组保存到redis。