在运行时部署流处理拓扑?

时间:2018-10-05 12:08:41

标签: apache-kafka apache-storm apache-kafka-streams flink-streaming

全部,

我有一个需要重新记录一些较旧数据的要求。我们有一个多阶段的管道,其来源是一个Kafka主题。一旦记录被输入,它就将经历一系列步骤(大约10个)。每个步骤都会对推送到源主题的原始JSON对象进行按摩,并推送到目标主题。

现在,有时候,我们需要重新摄取较旧的数据,并应用上述步骤的子集。我们打算将这些最新记录推到另一个主题,以免阻止正在通过的“实时”数据,这可能意味着我可能只需要应用上述10个步骤中的1个步骤即可。从上方在整个管道中运行它非常浪费,因为每个步骤都占用大量资源,并需要多个外部服务。另外,我可能需要一次重新输入数百万个条目,因此可能会阻塞我的外部服务。最后,这些重新设置活动不是那么频繁,有时可能仅一周一次。

让我们说一下是否能够找出需要执行的步骤。这可以通过基本规则引擎来完成。完成后,我需要能够动态创建拓扑/能够部署拓扑,并从新创建的主题开始进行处理。同样,我想在运行时上进行部署的原因是,尽管这些活动对业务至关重要,但是却不会经常发生。而且每次,我需要执行的步骤可能都会更改,因此我们不能总是让整个管道都在运行。

有没有办法做到这一点?还是我什至在朝着正确的方向思考,即我上面概述的方法是否正确?任何指针都会有所帮助。

1 个答案:

答案 0 :(得分:2)

我建议您创建一个动态拓扑,以便将重新摄取的数据作为单独的Kafka Streams应用程序使用。而且,如果您想以编程方式即时创建此类应用程序并在完成后将其终止,请考虑以下方法:

  1. 使每个步骤都是可配置的:您可能会传入一个旋钮参数列表,并根据它们来动态创建最复杂的拓扑。
  2. 如果您想自动触发此类重新摄入管道,请考虑使用一些内置的部署工具来调用KafkaStreams#start。
相关问题