我有一个问题是这个问题的变体:Flink: how to store state and use in another stream?
我有两个流:
string fil = @"D:\\vish1_vish.txt";
FileStream fs = new FileStream(File, FileMode.Create,FileAccess.Write);
val ipStream: DataStream[IPAddress] = ???
我想找出哪个包使用哪个路径。通常可以通过以下方式完成:
val routeStream: DataStream[RoutingTable] = ???
这里的问题是我无法真正在这里键入流,因为这需要完整的表和ip地址(并且键必须被隔离计算)。
对于val ip = IPAddress("10.10.10.10")
val table = RoutingTable(Seq("10.10.10.0/24", "5.5.5.0/24"))
val route = table.lookup(ip) // == "10.10.10.0/24"
中的每个元素,我需要最新的ipStream
元素。现在我正在使用一个黑客,所有这些都是非并行处理的:
routeStream
这听起来像广播策略的用例。但是,routeStream将更新,并且不会在文件中修复。问题仍然存在:有没有办法拥有两个流,其中一个流包含其他流的更改控制数据?
答案 0 :(得分:2)
既然我解决了这个问题,我也可以在这里写一个答案:)
我按这样键入了两个流:
这是在IP包通常在网络中使用相同的/ 8前缀进行路由的情况下工作的,这可以假设大多数流量。
然后,通过使有状态orderState
可以将路由表状态构建为密钥。收到新的IP包时,请在路由表中进行查找。现在有两种可能的情况:
这样,我们有两个流,其中一个流改变了另一个流的控制数据。