Apache Flink-将UID动态唯一地分配给移动的目标事件(跟踪应用)

时间:2019-03-16 21:41:57

标签: apache-flink flink-streaming

我需要开发一种应用程序的PoC,它可以动态识别跟踪移动目标的位置

应用程序接收流作为输入:

  • 不同事件 E
    • 新位置事件:当前位置[lat,lon]
    • transmissionCode已更改事件:已将代码更改为“ Code-1234”
    • ...
  • 通过移动目标(例如
    • 出租车
    • 公共汽车
    • ...

注意:传输代码可以随时间(一周一次)更改

源事件不包含有关哪个目标生成哪个事件的信息,因此我需要(尝试)基于事件属性的子集来唯一标识目标,例如:

targetID =函数(transmissionCode,时间戳,位置[,...])

通过连续处理流,应用程序应自动生成并更新具有最新已知位置和有关目标的信息(例如,最新已知传输代码)的已识别目标列表。

为此,我一直在阅读Apache Flink文档,但是对于如何正确实现此用例感到有些困惑。

我是Flink的新手,在阅读完所有内容后,我认为我应该这样做:

    通过事件时间
  1. 处理非键控输入流(并行度= 1?)
  2. 尝试通过查看事件的某些属性来识别目标(使用目标ID丰富事件的map函数吗?)
  3. 使用关联的事件信息生成新的targetID或更新列表中的现有targetID(带有状态的地图?)

疑问:

  1. 目标标识-在Flink的背景下考虑目标标识阶段是否是映射函数,该函数会在输出每个事件时添加目标ID并生成另一个流作为映射函数?
  2. 当前状态-如果1.是正确的,那么哪种Flink机制是用最新信息保存目标列表当前状态的最佳机制?我是否必须使用自定义POJO作为操作员状态并将整个列表存储在那里? (最大目标是20万)
  3. 并行化-我可以以某种方式并行化目标识别阶段还是应该顺序进行?

最后,我需要处理流并使用最新的已知信息生成移动目标列表。

我希望对Flink有更多经验的人能给我一些提示,并使我走上正确的道路。

预先感谢

0 个答案:

没有答案