Hi Jeremy, I was the engineer who gave that webinar. And the statement you quoted is misleading (IIRC, that’s not the wording I used when the question was asked).
Nathan is correct, the nextTuple(), ack() and fail() methods are all called from the same thread. At the moment I don’t have access to the specific errors that were encountered when using the storm-jms spout with IBM-MQ, but it was related that JMS implementation enforcing a strict policy around threads and JMS message acknowledgement (not Storm acks). I’ll try to dig up more details to refresh my memory and get back to you. -Taylor On Apr 1, 2015, at 11:37 AM, Parth Brahmbhatt <pbrahmbh...@hortonworks.com> wrote: > Jeremy, > > Taylor and I work for the same company and the webinar contains the same info > because it is coming from the same source. We will investigate further what > caused the IBM-MQ integration failure but we can not promise a timeline. Once > again apologies for providing inaccurate info in first place. > > Thanks > Parth > > From: jeremy p <athomewithagroove...@gmail.com> > Reply-To: user <user@storm.apache.org> > Date: Wednesday, April 1, 2015 at 8:19 AM > To: user <user@storm.apache.org> > Subject: Re: Using Storm with IBM MQ Series > > Nathan : thanks for the response! It appears that the engineer who gave this > webinar ran into the same problem as Parth : > http://hortonworks.com/blog/discover-hdp-2-2-apache-kafka-apache-storm-stream-data-processing/ > > He reports that he was unable to make MQ Series work with Storm because : > "We ran into issues with IBM MQ-Series with respect to how messages are > acknowledged by IBM MQ. IBM-MQ requires the thread that receives the message > be the same thread that acks it. Storm’s framework cannot support this > requirement, as the receiving and acking thread by design are different > threads to achieve higher throughput." > > If threading wasn't the issue, how would you explain Storm's behavior in this > situation? > > --Jeremy > > On Wed, Apr 1, 2015 at 12:11 AM, Parth Brahmbhatt > <pbrahmbh...@hortonworks.com> wrote: > Thanks for correcting me Nathan. > > Jeremy, in that case you can give storm-jms a shot and see if it works for > you. > > Thanks > Parth > > From: Nathan Marz <nat...@nathanmarz.com> > Reply-To: "user@storm.apache.org" <user@storm.apache.org> > Date: Tuesday, March 31, 2015 at 6:11 PM > To: "user@storm.apache.org" <user@storm.apache.org> > Subject: Re: Using Storm with IBM MQ Series > > That's not accurate. A spout task's nextTuple, ack, and fail methods are all > called by the exact same thread. You're confusing Storm acks with acks that > go back to the source message queue. Storm acks are about detecting tuple DAG > completion and have nothing to do with the ack to the source message queue. > > So if you weren't able to get it to work then it was a different problem. > > On Tue, Mar 31, 2015 at 2:48 PM, Parth Brahmbhatt > <pbrahmbh...@hortonworks.com> wrote: > I tried this once and failed, following are my findings: > > IBM MQ has a strict limitation the thread that receives the message has to be > the thread that acks it. This does not work with storm's threading model > where one thread reads the message and sends it to the bolt another thread > invokes spout's ack method when the bolt acks the message and only then the > spout can ack the message. > Based on > http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.dev.doc/q031020_.htm?lang=en > we tried looking into proprietary IBM MQ java client. The acking mechanism > relies on following 3 APIS > http://www-01.ibm.com/support/knowledgecenter/api/content/SSFKSJ_8.0.0/com.ibm.mq.javadoc.doc/WMQJavaClasses/com/ibm/mq/MQQueueManager.html#begin() > http://www-01.ibm.com/support/knowledgecenter/api/content/SSFKSJ_8.0.0/com.ibm.mq.javadoc.doc/WMQJavaClasses/com/ibm/mq/MQQueueManager.html#commit() > http://www-01.ibm.com/support/knowledgecenter/api/content/SSFKSJ_8.0.0/com.ibm.mq.javadoc.doc/WMQJavaClasses/com/ibm/mq/MQQueueManager.html#backout() > We could use these with one caveat. There is no way to cherry pick what > messages, or range of messages like JMS where you can pick the message with > lowest id, will get committed. > This means in the spout we will keep an active list of pending messages, when > ack method in spout is called for a message we remove the message from the > pending list and call commit only if the pending list is empty. This works as > long as the producer is slow or the consumers are slow but if both of them > are really fast the pending list may never become empty causing lot of memory > overhead on the box as well as server side overhead of keeping all the > messages around. > we could introduce a pseudo upper limit in spout where we stop handing out > messages once pending message list reaches some upper bound but that will > just slow down the topology. > In summary, it seems to be impossible to implement a IBM MQ spout that does > not run the risk of message loss and be performant. > > Thanks > Parth > > From: jeremy p <athomewithagroove...@gmail.com> > Reply-To: "user@storm.apache.org" <user@storm.apache.org> > Date: Tuesday, March 31, 2015 at 11:41 AM > To: "user@storm.apache.org" <user@storm.apache.org> > Subject: Using Storm with IBM MQ Series > > Hello all, > > According to this webinar recap, Storm cannot work with IBM MQ Series (also > known as Websphere MQ) : > http://hortonworks.com/blog/discover-hdp-2-2-apache-kafka-apache-storm-stream-data-processing/ > > This is a real bummer for me, because my company uses IBM MQ Series, and we > have a new project that Storm would be perfect for. Is there currently an > effort underway to make IBM MQ Series interoperate with Storm? Do you think > it's even possible to make Storm and IBM MQ Series work together? > > I'd really like to use Storm, if I can. > > > > -- > Twitter: @nathanmarz > http://nathanmarz.com >
signature.asc
Description: Message signed with OpenPGP using GPGMail