Hi Aggarwal How about keyBy(LargeMessageID) first, then assemble these fragments back into LargeMessages, then keyBy(MeyKey)?
Best, Congxian Aggarwal, Ajay <ajay.aggar...@netapp.com> 于2019年2月2日周六 上午5:42写道: > I am new to Flink. I am trying to figure out if there is an operator that > provides reverse functionality of KeyBy. Using KeyBy you can split a > stream into disjoint partitions. Is there a way to bring those partitions > back into a single stream? > > > > Let me explain using my use case below. > > > > My Input stream contains messages with following information > > { > > MyKey > > LargeMessageId > > LargeMessageFragment > > LargeMessageTimestamp // yes same timestamp repeated with each > fragment > > > > (… there are other fields, but I am leaving them out as they are not > important for this discussion) > > } > > > > > > My LargeMessage is fragmented at source into fragments. I have 2 main > requirements > > 1. Reassemble these fragments back into LargeMessages > 2. For each MyKey value, process the LargeMessages in the order based > on time associated with them. > > > > > > So I am thinking > > > > InputStream > > .KeyBy (MyKey) > > .KeyBy (LargeMessageId) > > .flatMap(new MyReassemblyFunction()) > > . ??? > > > > At this point I need to throw all assembled LargeMessages for a given > MyKey back into a common partition, so I can try to process them in order. > This is where I am stuck. Any help from the experts will be much > appreciated. > > > > Ajay > > >