com.ibm.streamsx.plumbing > redundant 1.0.1 > com.ibm.streamsx.plumbing.sample.redundant.active > ActiveReplicasManual3DeDup.spl
Example application demonstrating use of redundant flows and de-duplicators, with leadership election using ZooKeeper.
This is a simple example to demonstrate how duplicate output from redundant flows can be de-duplicated redundantly.
Three active replica flows mimic processing data and sending alerts. In this case there are two redundant de-duplicators with one active set by leadership election using LeadershipSwitchWithReplay. The de-duplicator sends a single alert even though there are three active replicas generating alerts. Upon a failure of the de-duplicator the inactive one is elected as the leader and starts to send the alerts out.
public composite ActiveReplicasManual3DeDup { graph // JobControlPlane to support leadership election () as JCP = JobControlPlane() { } // Mimic three redundant flows and publish them. () as RF0 = PublishFlow() { config placement: host(Rack_0); } () as RF1 = PublishFlow() { config placement: host(Rack_1); } () as RF2 = PublishFlow() { config placement: host(Rack_2); } // Subscribe the three redundant flows into // each of the two de-duplicators // Only one will be elected the leader and submit the de-duplicated // tuples to the output. () as LD0 = RedundantDeDuplicator () { config placement: host(Rack_0); } () as LD1 = RedundantDeDuplicator() { config placement: host(Rack_1); } config // Pools are created shared to allow // other applications to use the same hosts. hostPool: Rack_0 = createPool({tags=["rack_0"]}, Sys.Shared), Rack_1 = createPool({tags=["rack_1"]}, Sys.Shared), Rack_2 = createPool({tags=["rack_2"]}, Sys.Shared); }