apache-flink多线程/并行执行

csga3l58  于 2021-06-24  发布在  Flink
关注(0)|答案(2)|浏览(640)

输入流由json对象数组格式的数据组成。每个对象都有一个名为state的字段/键,我们需要通过它来分离输入流,请参见下面的示例
object1->“state”:“活动”
object2->“state”:“空闲”
object3->“state”:“阻塞”
object4->“state”:“活动”
我们必须在收到一个特定的状态后立即开始处理/线程,如果一个新状态与前一个状态相似,则继续获取数据,让前一个线程处理它,否则为新状态启动一个新线程。另外,每个线程需要运行有限的时间,所有线程都应该并行运行。
请建议我如何在ApacheFlink做它。伪代码和链接会很有帮助。

t1qtbnec

t1qtbnec1#

根据您的描述,我认为首先需要一个并行度为1的操作符,该操作符按状态“chunks”事件,并向输出记录添加“chunkid”。每当您得到一个具有新状态的事件时,您都会增加块id。
然后按块id键,这将并行化下游处理。添加一个自定义函数,该函数由chunk id键控,窗口持续时间为10分钟。这就是大部分数据处理的地方。
正如@narush上面提到的,您应该仔细阅读他链接到的文档,以便了解windows在flink中的工作方式。

hgtggwj0

hgtggwj02#

这可以通过flink的datastreamapi实现。每个json对象都可以被视为一个元组,可以用任何flink操作符来处理。

/----- * *  | Active
------ (KeyBy) ------ *    | Idle
               \----- *    | Blocked

现在,您可以使用keyby操作符将单个数据流拆分为多个流。这个操作符将所有具有特定键的元组(在您的例子中是state)拆分并合并到一个keyedstream中,这个keyedstream是并行处理的。在内部,这是通过哈希分区实现的。
任何新的密钥(状态)都会在为它们创建新的keyedstream时动态处理。
浏览文档以实现目的。

相关问题