Hi Fabian and Kostas: Thanks! Both approaches look good, although I prefer using union, since then I can apply next steps to a single stream.
Here is my code now: //For each data source val normalizedStreams = dataSources.map(source => { val sourceName = source._1 val dataSource = source._2 //Create stream from kafka topic val eventStream = env.addSource(KafkaSource(conf, dataSource)) //Normalize event stream val normalizer = dataSource.normalizer val normalizedStream = eventStream.map(event => normalizer.normalizedEvent(Event(event))) normalizedStream }) var unitedNormalizedStream = normalizedStreams.head normalizedStreams.tail.foreach(stream => unitedNormalizedStream = unitedNormalizedStream.union(stream)) //Enrich normalized event stream for each registered enrichment, in two different streams val enrichedEventStream = unitedNormalizedStream.map(event => { var enrichedEvent = EnrichedEvent(event, mutable.Map()) for ((enrichmentName, enrichment) <- enrichments) { enrichedEvent = enrichment.enriched(enrichedEvent) } enrichedEvent }) enrichedEventStream.addSink(new RollingSink[EnrichedEvent](conf.getString(Configuration.HDFS_LANDING_AREA, "")).setBucketer(new DateTimeBucketer("yyyy-MM-dd--HHmm"))) Does it look good? I don’t like the way that I have to do union by means of a var… Is there a helper class to union a stream list? Kind regards, Diego De: Fabian Hueske [mailto:fhue...@gmail.com] Enviado el: martes, 29 de noviembre de 2016 15:52 Para: user@flink.apache.org Asunto: Re: Problems with RollingSink Hi Diego, If you want the data of all streams to be written to the same files, you can also union the streams before sending them to the sink. Best, Fabian 2016-11-29 15:50 GMT+01:00 Kostas Kloudas <k.klou...@data-artisans.com<mailto:k.klou...@data-artisans.com>>: Hi Diego, You cannot prefix each stream with a different string so that the paths do not collide? If I understand your use-case correctly, this might work. Cheers, Kostas On Nov 29, 2016, at 10:04 AM, Diego Fustes Villadóniga <dfus...@oesia.com<mailto:dfus...@oesia.com>> wrote: Hi Kostas, Thanks for your reply. The problem is at the initialization of the job. The reason was that I was using the same HDFS path as sink for 3 different streams, which is something that I would like. I can fix it by using different paths for each stream. Maybe there is a way to achieve this in a different manner by joining the streams somehow before sinking… maybe through Kafka? Kind Regards, Diego De: Kostas Kloudas [mailto:k.klou...@data-artisans.com] Enviado el: lunes, 28 de noviembre de 2016 19:13 Para: user@flink.apache.org<mailto:user@flink.apache.org> Asunto: Re: Problems with RollingSink Hi Diego, The message shows that two tasks are trying to touch concurrently the same file. This message is thrown upon recovery after a failure, or at the initialization of the job? Could you please check the logs for other exceptions before this? Can this be related to this issue? https://www.mail-archive.com/issues@flink.apache.org/msg73871.html Thanks, Kostas On Nov 28, 2016, at 5:37 PM, Diego Fustes Villadóniga <dfus...@oesia.com<mailto:dfus...@oesia.com>> wrote: Hi colleagues, I am experiencing problems when trying to write events from a stream to HDFS. I get the following exception: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException): failed to create file /user/biguardian/events/2016-11-28--15/flinkpart-0-0.text for DFSClient_NONMAPREDUCE_1634980080_43 for client 172.21.40.75 because current leaseholder is trying to recreate file. My Flink version is 1.1.3 and I am running it directly from a JAR (not in YARN) with java -jar. Do you know the reason of this error? Kind regards, Diego