0

我有一个由多个文件组成的目录,并且在多个数据收集器之间共享。我有一份工作来处理这些文件并将其放入目的地。因为记录很大,我想在多个数据收集器中运行这项工作。但是当我尝试时,我在目的地得到了重复的条目。有没有办法在不复制记录的情况下实现它。谢谢

4

2 回答 2

1

你可以使用卡夫卡。例如:

  • 创建一个管道,它读取文件名并通过 kafka 生产者将它们发送到 kafka 主题。
  • 创建以 kafka 消费者为源的管道并将消费者组属性设置为它。此管道将读取文件名并处理文件。
  • 现在,您可以使用具有相同消费者组的 kafka 消费者运行多个管道。在这种情况下,kafka 将自行平衡消费者组内的消息,并且您不会收到重复消息。
  • 为了确保您不会有重复项,还将 'acks' = 'all' 属性设置为 kafka 生产者。

使用此模式,您可以运行与您的 kafka 主题分区数一样多的收集器。希望它会帮助你。

于 2018-10-20T16:39:28.587 回答
0

从 Ask StreamSets复制我的答案:

目前没有办法跨多个数据收集器自动分区目录内容。

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

一种方法是将文件名模式设置为运行时参数- 例如${FileNamePattern}。然后,您可以在管道的参数选项卡中或通过 CLI、API、UI 或 Control Hub 启动管道时设置模式的值。

于 2018-07-18T01:41:20.203 回答