作业的多个数据收集器,而无需在流集中复制记录

时间:2018-07-17 07:41:40

标签: data-collection streamsets

我有一个目录,其中包含多个文件,并且在多个数据收集器之间共享该目录。我有一份工作来处理这些文件并将其放在目标位置。因为记录很大,所以我想在多个数据收集器中运行该作业。但是当我尝试时,我在目的地得到了重复的条目。有没有一种方法可以实现而不重复记录。谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用kafka。例如:

  • 创建一个管道来读取文件名,并通过kafka生产者将其发送到kafka主题。
  • 创建一个以kafka消费者为起点的管道,并为其设置消费者组属性。该管道将​​读取文件名并使用文件。
  • 现在,您可以在具有相同使用者组的kafka使用者上运行多个管道。在这种情况下,kafka会自行平衡消费者组中的消息,而您不会重复。
  • 为确保您不会重复,还为kafka生产者设置了“ acks” =“ all”属性。

使用此架构,您可以运行与kafka主题分区数量一样多的收集器。 希望对您有帮助。

答案 1 :(得分:0)

复制my answer from Ask StreamSets

目前,无法在多个数据收集器之间自动对目录内容进行分区。

您可以在多个数据收集器上运行类似的管道,并在文件名模式配置中使用不同的字符范围手动对源中的数据进行分区。例如,如果您有两个数据收集器,并且文件名分布在整个字母上,则第一个实例可以处理[a-m]*,第二个实例可以处理[n-z]*

一种方法是将“文件名模式”设置为runtime parameter-例如${FileNamePattern}。然后,您可以在管道的“参数”标签中,或者在通过CLI,API,UI或控制中心启动管道时,为模式设置值。