我正在寻找一种方法来实现/使用扇出,它采取1输入,并广播到N个输出并行,不同的是,我想划分他们。
**示例:**1个输入可以发送到4个不同的输出,其他输入可以发送到2个其他输出,取决于某些函数f
source ~> partitionWithBroadcast // Outputs to some subset of [0,3] outputs
partitionWithBroadcast(0) ~> ...
partitionWithBroadcast(1) ~> ...
partitionWithBroadcast(2) ~> ...
partitionWithBroadcast(3) ~> ...
我在Akka文档中进行了搜索,但未找到任何合适的流程
有什么主意吗?
2条答案
按热度按时间pbpqsu0x1#
我想到的是一个
FanOutShape
,每个输出都连接了过滤器。**注意:**我没有使用标准的Partition
operator,因为它只发射到1个输出。这个问题要求发射到任何连接的输出。例如:partitioner
是一个函数,它将上游的一个元素Map到一个元组中,元组中包含该元素和一组将激活相应输出的整数。图计算所需的划分,然后广播元组。连接到Broadcast
的每个输出的流选择划分器分配给该输出的元素。然后使用它,例如:
h4cxqtbf2#
首先,实现您的函数以创建分区:
然后,创建另一个函数来创建一个带有log函数的Sink,该函数将用于在控制台中打印元素:
连接**graph* 函数中的所有元素:
创建一个发出五个Int元素的源。用于创建分区的函数为“element % 4"。根据此函数的结果,元素将被重定向到特定源:
结果获得: